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

时间:2008-09-25 21:05:02

标签: winforms

我正在尝试为Label Control设置禁用的字体特征。我可以设置所有字体特征(大小,粗体等),但颜色被默认的窗口行为覆盖,这似乎是这两种颜色之一:

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

下图显示了行为 - 第1列是标签,第2列是文本框,第3列是组合框。

alt text

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

6 个答案:

答案 0 :(得分:2)

您是否尝试过实施EnabledChanged事件?或者您是否在控件上寻找更多“样式”属性(据我所知,它们不存在)?

答案 1 :(得分:2)

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

不确定这是否会推断出其他控制类型,比如组合框等等,因为我还没有机会进行实验,但是值得一试。

答案 2 :(得分:1)

看一下ControlPaint.DrawStringDisabled方法;它可能是有用的东西。我在覆盖自定义控件的OnPaint事件时使用过它。

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

答案 3 :(得分:0)

为什么这是一个问题?

我个人会让Windows处理它。人们习惯于以某种方式禁用项目,所以如果你开始尝试改变他们看待的方式的每个方面,你可能会开始混淆你的用户。

答案 4 :(得分:0)

您可能需要覆盖Paint事件。到目前为止,我使用的所有工具包在禁用控件时都会遇到同样的问题。只是猜测他们让窗户绘制文字。至于标签,他们不是标准控件,这就是他们工作的原因。

答案 5 :(得分: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);
    }

}