我正试图设置一个标签控件的禁用字体特征。我可以设置所有字体特征(大小,加粗等),但颜色会被默认的Windows行为覆盖,似乎是以下两种颜色之一:
- 如果背景颜色是透明的,则前景色与文本框禁用颜色相同。
- 如果背景颜色设置为其他任何颜色,则前景色是深灰色。
下面的图像演示了这种行为--列1是标签,列2是文本框,列3是组合框。
编辑--解释图像:前两行是标签、文本框和组合框的默认样式。在后两行中,我将背景颜色设置为红色,前景色设置为白色。Microsoft的禁用字体样式处理不一致。
我正试图设置一个标签控件的禁用字体特征。我可以设置所有字体特征(大小,加粗等),但颜色会被默认的Windows行为覆盖,似乎是以下两种颜色之一:
下面的图像演示了这种行为--列1是标签,列2是文本框,列3是组合框。
编辑--解释图像:前两行是标签、文本框和组合框的默认样式。在后两行中,我将背景颜色设置为红色,前景色设置为白色。Microsoft的禁用字体样式处理不一致。
你尝试过实现EnabledChanged事件吗?还是你在寻找控件上的“styles”属性(据我所知,它们不存在)?
对于文本框,您可以将只读属性设置为true,同时保持控件启用。然后,您可以将BackColor和ForeColor属性设置为任何您喜欢的颜色。用户仍然可以单击该控件并拥有闪烁的光标,但他们将无法编辑任何内容。
不确定是否可以推广到其他控件类型,例如组合框或其他控件,因为我还没有机会进行实验,但值得一试。
看一下ControlPaint.DrawStringDisabled方法,它可能会有所帮助。我在自定义控件时重写OnPaint事件时使用过它。
ControlPaint.DrawStringDisabled(g, this.Text, this.Font, Color.Transparent,
new Rectangle(CustomStringWidth, 5, StringSize2.Width, StringSize2.Height), StringFormat.GenericTypographic);
这为什么是个问题?
我个人会让Windows来处理它。人们已经习惯了禁用的项目以特定的方式显示,所以如果你开始尝试改变它们外观的每个方面,可能会让用户感到困惑。
我使用下面的OnPaint方法重写了我的控件的OnPaint方法。为了方便复制,我粘贴了整个控件类。
public partial class NewLabel : Label
{
public NewLabel()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e)
{
TextRenderer.DrawText(e.Graphics, this.Text.ToString(), this.Font, ClientRectangle, ForeColor);
}
}