首页 文章

如何在不更改其子项ForeColor的情况下更改GroupBox文本的ForeColor?

提问于
浏览
2

我想知道是否有一个选项可以只更改窗体中组框左上角的组框文本的颜色,而不是组框内部的任何控件或标签 .

我知道 GroupBox.ForeColor = Color.Blue 会将与该框相关联的所有文本更改为蓝色,但它也会更改 GroupBox 中的标签和其他控件的 ForeColor .

如何更改组框文本的颜色而不更改其子颜色?

2 回答

  • 0

    ForeColor属性是环境属性 . 环境属性是一个控件属性,如果未设置,则从父控件中检索 .

    由于您没有为组框中的标签和文本框设置 ForeColor ,因此它们将使用其父级的 ForeColor 值 . 您可以使用以下任一选项解决此问题:

    • Panel 放入 GroupBoxGroupBoxGroupBox 设置为 Blue 并使用designer明确地将 ForeColorPanel 设置为 ControlText . 然后将其他控件放在 Panel 中 . 这样,您的控件将使用您明确设置的 ForeColor Panel .

    • 自定义 Paint of 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
    
  • 4

    只要我知道,所有子控件都将获取父控件的属性 .

    您可以存储所有子颜色,并在设置GroupBox的ForeColor后更改它们 . 您可以在每对Control / Color中使用Dictionary .

    就像是:

    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
    

    你可以把它放在一个方法中 .

    有关该 properties 的更多信息,请致电MSDN .

相关问题