我在具有表单的Windows应用程序中工作。此表单包含一个具有一些复选框的组框。我已将此组框设置为禁用。现在我的问题是复选框文本的前色。它变成浅灰色,如下图所示。
如何更改复选框文本的前景颜色,使其看起来不像禁用(浅灰色)。
答案 0 :(得分:10)
不要禁用它,只需将AutoCheck属性设置为False
答案 1 :(得分:0)
您已经拥有所有者绘制的 CheckBox
(或者它是某人的某个组成部分),所以解决方案是将其文本绘制为所需的颜色,忽略Enabled
值,正确的。
其他可能性是不禁用CheckBox
'es的父容器,那么有很多可能性:
GroupBox
(这是出于某种原因,用户习惯使用它);
CheckBox
被点击(虽然这不符合要求):将AutoCheck
设置为false,将Checked
值恢复为在OnCheckedChanged
; GroupBox
内托管控件(闻起来很难^^):
GroupBox
在,而不是父母; GroupBox
GroupBox
答案 2 :(得分:0)
这是我在具有深色BackColor和浅色ForeColor的窗体上使用的解决方法。标签,复选框和组框上的ForeColor禁用时会变为黑色,因此我不使用Form1.Enabled = False或Panel1.Enabled = False或GroupBox1.Enabled = False,而是使用Form1.Controls.SetEnabled(False), Panel1.SetEnabled(False)或GroupBox1.SetEnabled(False)。为了使扩展正常工作,您需要在希望使扩展可用的类中添加“导入扩展”。
Public Module Extensions
''' <summary>Sets Enabled property on most controls, set AutoCheck property on CheckBox controls, and ignores GroupBox and Label controls if Enabled parameter equals False.</summary>
''' <remarks>Purpose: Disabled GroupBox, Label, and CheckBox controls have Black ForeColor when disabled, making it difficult or impossible to read if background is dark color.</remarks>
''' <example>Instead of Panel1.Enabled=False, use Panel1.Controls.SetEnabled(Enabled:=False)</example>
<Extension()>
Public Sub SetEnabled(ByRef Controls As System.Windows.Forms.Control.ControlCollection, ByVal Enabled As Boolean, Optional ByVal Recursive As Boolean = True)
For Each c As Control In Controls
If Enabled = False Then
' Do not disable some controls such as group boxes
Select Case c.GetType
Case GetType(GroupBox), GetType(Label)
' Do nothing to control
Case GetType(CheckBox)
' Change AutoCheck property instead
DirectCast(c, CheckBox).AutoCheck = False
Case Else
' Disable control
c.Enabled = False
End Select
Else
Select Case c.GetType
Case GetType(CheckBox)
' Set Enabled and AutoCheck properties to true for CheckBox controls
With DirectCast(c, CheckBox)
.AutoCheck = True
.Enabled = True
End With
Case Else
' Enable all other Controls
c.Enabled = True
End Select
End If
If Recursive = True AndAlso c.Controls IsNot Nothing AndAlso c.Controls.Count > 0 Then
c.Controls.SetEnabled(Enabled, Recursive)
End If
Next
End Sub
End Module