2008-09-25 71 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); 
    } 

}