【问题标题】:How do I change the ForeColor of a GroupBox without having that color applied to every child control as well?如何在不将该颜色应用于每个子控件的情况下更改 GroupBox 的 ForeColor?
【发布时间】:2009-03-19 13:20:23
【问题描述】:

我需要将组框文本更改为特定颜色,而不更改组框内内容的颜色。

以下代码将GroupBoxForeColor 设置为粉红色,但此设置也级联到所有子控件:

groupbox.ForeColor = Color.Pink 

如何更改 GroupBoxForeColor 而不将该颜色应用于每个子控件?

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    您可以遍历 GroupBox 中的所有控件并设置它们各自的 ForeColor 属性:

    groupBox1.ForeColor = Color.Pink;
    foreach (Control ctl in groupBox1.Controls) {
        ctl.ForeColor = SystemColors.ControlText;
    }
    

    【讨论】:

    • @Andrew,不,它本身就是容器的子控件的任何子控件都将从其直接父控件(而不是 GroupBox)“继承” ForeColor 属性
    • 请注意,这假定所有子控件的前景色为SystemColors.ControlText。虽然这在 99% 的情况下可能是正确的,但在特殊情况下,您可能希望首先检查子控件并将它们的前景色保存在 IDictionary 中,以确保它们保持原来的前景色。
    【解决方案2】:
    form_load()
    {
        ...
        foreach (Control ctl in groupbox.Controls) 
        {
            // load color value from parent and explicitly set it to control level
            ctl.ForeColor = ctl.ForeColor;
        }
        ...
    }
    
    
    some_click()
    {
        groupbox.ForeColor = Color.Pink;
    }
    
    someother_click()
    {
        groupbox.ForeColor = Color.Green; 
    }
    

    在明确完成之前,不会为子控件设置颜色,并且当子控件颜色请求从父控件获取时。更改父级的颜色将刷新其所有内容,子控件将从父级获取颜色。

    如果您(明确)设置子颜色,则子颜色不会“询问”父颜色。

    子颜色也可以在设计器中设置,但是如果颜色与父颜色相同,设计器会减少这个设置。加载事件中的代码强制孩子有自己的颜色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多