2011-05-14 42 views
8

在創建我的真棒匹配遊戲期間;)我發現一個完全遙不可及的問題。禁用控件的文本顏色 - 如何更改它

當玩家選擇兩個帶有符號的標籤時,我想鎖定所有其他標籤4秒鐘。

但是,當我這樣做,所有標籤的前景變成灰色,符號是可見的。我的問題是 - 有沒有一種方法來改變在visual c#中禁用標籤的ForeColor

該項目是一個WinForm應用程序。

此刻,我在代碼中設置標籤的顏色是這樣的:

label1.ForeColor = lable1.BackColor; 

當用戶點擊我將其更改爲標籤:

lable1.ForeColor = Color.Black; 
+3

什麼項目類型? WinForms,WPF,ASP.NET? – 2011-05-14 15:01:44

+0

你現在怎麼設置顏色?你能發佈你的代碼嗎? – Oded 2011-05-14 15:02:31

+4

標籤**總是**「鎖定」,至少在用戶不能編輯文本或以其他方式操縱它們的意義上說。沒有必要禁用它們來獲得這種效果。 – 2011-05-14 15:05:29

回答

7

簡單比試圖要改變Windows繪製禁用控件的方式,只需在您希望Label有效「禁用」時簡單設置一個標誌,然後在採用w之前在您的Click事件處理程序方法中檢查該標誌的值你想要的憎恨行爲。如果控件已被「禁用」,則不要採取任何行動。

事情是這樣的:

private bool labelDisabled = false; 

private void myLabel_Click(object sender, EventArgs e) 
{ 
    if (!labelDisabled) 
    { 
     this.ForeColor = SystemColors.ControlText; 
    } 
} 

另外請注意,你應該總是使用SystemColors,而不是像Color.Black
如果您硬編碼特定的顏色值,它們在用戶定製其默認Windows主題時經常會發生衝突。 Raymond Chen在他的博客文章中討論了這種危險。

+0

感謝它很好,很簡單 – Mqati 2011-05-14 17:47:51

+7

只是對「總是使用SystemColors」建議發表評論 - 我會說它應該總是或永遠不會 - 因爲在硬編碼所有顏色或者沒有任何顏色。有時你想自己控制事物的外觀,而不是成爲Windows主題的奴隸。但不要混淆它們,那就是當你發生衝突時。 – 2013-12-10 22:02:47

+1

是的,這絕對是一件「無所謂」的事情。但我對你的「Windows主題的奴隸」措辭有疑問。如果您認爲它是「用戶喜好的奴隸」,它會有所幫助。一個相當好的主意。 – 2016-02-05 14:10:42

8

只是一個重新油漆事件創建自己的標籤:

protected override void OnPaint (System.Windows.Forms.PaintEventArgs e) 
{ 
    if (Enabled) 
    { 
     //use normal realization 
     base.OnPaint (e); 
     return; 
    } 
    //custom drawing 
    using (Brush aBrush = new SolidBrush("YourCustomDisableColor")) 
    { 
     e.Graphics.DrawString(Text, Font, aBrush, ClientRectangle); 
    } 
} 

文本繪製過程中要小心文本格式標誌。

+0

對於任何其他人試圖用DateTimePicker做到這一點:這裏是解決方案http://stackoverflow.com/questions/1595481/datetimepicker-and-userpaint-text-and-button-missing – Breeze 2017-03-16 15:30:06