Windows窗体:如何更改禁用标签的字体颜色

11

我正试图设置一个标签控件的禁用字体特征。我可以设置所有字体特征(大小,加粗等),但颜色会被默认的Windows行为覆盖,似乎是以下两种颜色之一:

  • 如果背景颜色是透明的,则前景色与文本框禁用颜色相同。
  • 如果背景颜色设置为其他任何颜色,则前景色是深灰色。

下面的图像演示了这种行为--列1是标签,列2是文本框,列3是组合框。

alt text

编辑--解释图像:前两行是标签、文本框和组合框的默认样式。在后两行中,我将背景颜色设置为红色,前景色设置为白色。Microsoft的禁用字体样式处理不一致。

6个回答

2

你尝试过实现EnabledChanged事件吗?还是你在寻找控件上的“styles”属性(据我所知,它们不存在)?


2

对于文本框,您可以将只读属性设置为true,同时保持控件启用。然后,您可以将BackColor和ForeColor属性设置为任何您喜欢的颜色。用户仍然可以单击该控件并拥有闪烁的光标,但他们将无法编辑任何内容。

不确定是否可以推广到其他控件类型,例如组合框或其他控件,因为我还没有机会进行实验,但值得一试。


1

看一下ControlPaint.DrawStringDisabled方法,它可能会有所帮助。我在自定义控件时重写OnPaint事件时使用过它。

ControlPaint.DrawStringDisabled(g, this.Text, this.Font, Color.Transparent,
                new Rectangle(CustomStringWidth, 5, StringSize2.Width, StringSize2.Height), StringFormat.GenericTypographic);

0

这为什么是个问题?

我个人会让Windows来处理它。人们已经习惯了禁用的项目以特定的方式显示,所以如果你开始尝试改变它们外观的每个方面,可能会让用户感到困惑。


0
你可能需要覆盖Paint事件。到目前为止我使用过的所有工具包都存在同样的问题,当控件被禁用时就只能猜测它们让Windows来绘制文本。至于标签,它们不是标准控件,所以它们能正常工作。

0

我使用下面的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);
    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接