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

How can I change the ForeColor of the GroupBox text without changing its children ForeColor?

我想知道是否有一个选项可以只更改 windows 表单中组框左上角的组框文本的颜色,而不是组内的任何控件或标签盒子。

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

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

据我所知,所有的子控件都会占用父控件的属性。

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

类似于:

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

The ForeColor property is an ambient property. An ambient property is a control property that, if not set, is retrieved from the parent control.

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

  1. GroupBox中放一个PanelGroupBoxForeColor设置为Blue并设置ForeColorPanelControlText 明确使用设计器。然后把其他控件放在Panel中。这样,您的控件将使用您明确设置的 ForeColor of Panel

  2. 自定义 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