【发布时间】:2009-03-19 13:20:23
【问题描述】:
我需要将组框文本更改为特定颜色,而不更改组框内内容的颜色。
以下代码将GroupBox 的ForeColor 设置为粉红色,但此设置也级联到所有子控件:
groupbox.ForeColor = Color.Pink
如何更改 GroupBox 的 ForeColor 而不将该颜色应用于每个子控件?
【问题讨论】:
我需要将组框文本更改为特定颜色,而不更改组框内内容的颜色。
以下代码将GroupBox 的ForeColor 设置为粉红色,但此设置也级联到所有子控件:
groupbox.ForeColor = Color.Pink
如何更改 GroupBox 的 ForeColor 而不将该颜色应用于每个子控件?
【问题讨论】:
您可以遍历 GroupBox 中的所有控件并设置它们各自的 ForeColor 属性:
groupBox1.ForeColor = Color.Pink;
foreach (Control ctl in groupBox1.Controls) {
ctl.ForeColor = SystemColors.ControlText;
}
【讨论】:
SystemColors.ControlText。虽然这在 99% 的情况下可能是正确的,但在特殊情况下,您可能希望首先检查子控件并将它们的前景色保存在 IDictionaryform_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;
}
在明确完成之前,不会为子控件设置颜色,并且当子控件颜色请求从父控件获取时。更改父级的颜色将刷新其所有内容,子控件将从父级获取颜色。
如果您(明确)设置子颜色,则子颜色不会“询问”父颜色。
子颜色也可以在设计器中设置,但是如果颜色与父颜色相同,设计器会减少这个设置。加载事件中的代码强制孩子有自己的颜色。
【讨论】: