2008-09-25 91 views
11

我试图设置标签控件的禁用字体特征。我可以将所有的字体特性(大小,粗体,等等),但颜色由默认的Windows行为,这似乎是这两种颜色的一个覆盖:Windows窗体:如何更改已禁用标签的字体颜色

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

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

alt text http://highplainstech.com/images/testForm.png

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

回答

1

看看ControlPaint.DrawStringDisabled方法;这可能是有帮助的。当为自定义控件重写OnPaint事件时,我使用它。

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

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

0

为什么这是一个问题?

我会亲自让Windows处理它。人们习惯于以某种方式禁用物品,因此如果您开始试图改变他们所看到的方式的每个方面,您可能会开始混淆用户。

0

您可能需要重写Paint事件。当控件被禁用时,我迄今使用的所有工具包都有同样的问题。只是猜测他们让窗口做文本的绘制。至于标签,他们不是标准的控制,这就是他们工作的原因。

2

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

不确定这是否推断出其他控制类型,如组合框或什么都没有,因为我还没有机会尝试,但它值得一试。

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); 
    } 

}