【问题标题】: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 中的其他控件。

如何在不更改子前景色的情况下更改组框文本的颜色?

【问题讨论】:

  • 看看this问题,你会发现几个选项。

标签: vb.net winforms groupbox


【解决方案1】:

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

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

  1. Panel 放入GroupBoxGroupBoxForeColor 设置为Blue,并使用设计器将PanelForeColor 设置为ControlText。然后把其他控件放在Panel中。这样,您的控件将使用您明确设置的Panel 中的ForeColor

  2. 自定义PaintGroupBox

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-22
      • 1970-01-01
      • 1970-01-01
      • 2016-06-23
      • 1970-01-01
      • 2015-12-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多