Windows窗体:如何更改禁用标签的字体颜色
时间:2020-03-06 14:45:00 来源:igfitidea点击:
我试图为标签控件设置禁用的字体特征。我可以设置所有字体特征(大小,粗体等),但是默认的Windows行为(似乎是这两种颜色之一)覆盖了该颜色:
- 如果背景色是透明的,则ForeColor与禁用了TextBox的颜色相同。
- 如果将背景色设置为其他任何颜色,则ForeColor是深灰色。
下图演示了此行为-第1列是Labels,第2列是TextBoxs,第3列是ComboBoxes。
替代文字http://highplainstech.com/images/testForm.png
编辑-解释图像:前两行是标签,文本框和组合框的默认样式。在后两行中,我将"背景"颜色设置为"红色",并将"前景"设置为"白色"。 Microsoft禁用的字体样式处理不一致。
解决方案
我们是否尝试实现EnabledChanged事件?还是在控件上寻找更多的"样式"属性(据我所知,它们不存在)?
为什么这是一个问题?
我个人将让Windows处理它。人们习惯于以某种方式禁用项目,因此,如果我们开始尝试更改其外观的各个方面,则可能会使用户感到困惑。
我们可能需要重写Paint事件。禁用控件后,到目前为止我使用的所有工具包都存在相同的问题。只是猜测他们让Windows绘制了文本。至于标签,那么它们不是标准控件,这就是它们起作用的原因。
看一下ControlPaint.DrawStringDisabled方法;这可能会有所帮助。我在为自定义控件覆盖OnPaint事件时使用了它。
ControlPaint.DrawStringDisabled(g, this.Text, this.Font, Color.Transparent, new Rectangle(CustomStringWidth, 5, StringSize2.Width, StringSize2.Height), StringFormat.GenericTypographic);
对于文本框,可以在保持控件启用的同时将readonly属性设置为true。然后,我们可以将BackColor和ForeColor属性设置为所需的值。用户仍然可以单击控件并具有闪烁的光标,但是他们将无法编辑任何内容。
不确定是否将其推断到其他控件类型(如组合框或者其他控件),因为我还没有机会进行实验,但是值得一试。