【问题标题】:How can I change the ForeColor of the GroupBox text without changing its children ForeColor?如何在不更改其子项 ForeColor 的情况下更改 GroupBox 文本的 ForeColor?
【发布时间】:2016-06-13 15:20:59
【问题描述】:
我想知道是否有一个选项可以仅更改 Windows 窗体中组框左上角的组框文本的颜色,而不是更改组框内的任何控件或标签。
我知道GroupBox.ForeColor = Color.Blue 会将与该框关联的所有文本更改为蓝色,但它也会更改ForeColor 的标签和GroupBox 中的其他控件。
如何在不更改子前景色的情况下更改组框文本的颜色?
【问题讨论】:
标签:
vb.net
winforms
groupbox
【解决方案1】:
ForeColor 属性是环境属性。环境属性是
一个控件属性,如果未设置,则从父级检索
控制。
由于您没有为组框中的标签和文本框设置ForeColor,它们将使用其父级的ForeColor 值。您可以使用以下任一选项解决此问题:
将Panel 放入GroupBox 将GroupBox 的ForeColor 设置为Blue,并使用设计器将Panel 的ForeColor 设置为ControlText。然后把其他控件放在Panel中。这样,您的控件将使用您明确设置的Panel 中的ForeColor。
-
自定义Paint 的GroupBox:
Private Sub GroupBox1_Paint(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.PaintEventArgs) Handles GroupBox1.Paint
e.Graphics.Clear(Me.GroupBox1.BackColor)
GroupBoxRenderer.DrawGroupBox(e.Graphics, Me.GroupBox1.ClientRectangle, _
Me.GroupBox1.Text, Me.GroupBox1.Font, Color.Blue, _
System.Windows.Forms.VisualStyles.GroupBoxState.Normal)
End Sub
【解决方案2】:
据我所知,所有子控件都将获取父控件的属性。
您可以存储所有子颜色并在设置 GroupBox 的 ForeColor 后更改它们。您可以将字典与每对控件/颜色一起使用。
类似:
Dim cColors As New Dictionary(Of Control, Color)
For Each ctrl As Control In GroupBox1.Controls
cColors.Add(ctrl, ctrl.ForeColor)
Next
GroupBox1.ForeColor = Color.Blue
For Each ctrl As Control In GroupBox1.Controls
If cColors.HasKey(ctrl) Then
ctrl.ForeColor = cColors(ctrl)
End If
Next
你可以把它放在一个方法中。
有关该物业的更多信息,请访问MSDN。