2012-05-13 122 views
33

我正在試驗按鈕背景顏色的不同選項,並最終更改了外觀類別中的BackColor屬性。然後,我就變回它在默認情況下這是什麼Control,但它仍然看起來不同於其他按鈕:如何重置爲默認按鈕BackColor?

Screenshot of buttons

我已經試過建設項目,並重新啓動Visual Studio中,但它並沒有幫助。

我知道我只需拖動另一個按鈕並複製/粘貼代碼,但首先導致此問題的原因是什麼,如何正確解決該問題?

+0

如果在設計模式改變,那麼只要到[背景色]屬性(在設計模式),並點擊右鍵。你會得到一個菜單恢復到默認狀態。 –

回答

54

BackColor屬性默認情況下是一個環境屬性,這意味着它從其父控件繼承它的值。當您將其設定爲明確爲一個特定的值時,它將覆蓋周圍環境並迫使其使用該特定值。

標準的Windows按鈕控件不支持自定義顏色,因此WinForms實際上會自定義繪製控件以允許設計器覆蓋其顏色。這樣,如果你想要一個醜陋的綠色或紅色按鈕,你可以做到這一點。

這裏發生了什麼是你已經有效地爲按鈕控件設置了一個自定義的背景顏色(你將它設置爲3D控件的背景顏色,但它可能很容易變成紫色),這就迫使WinForms自定義繪製控件並使用指定的顏色繪製其背景。這就是它的「平坦」外觀 - 背景顏色現在用單個自定義顏色繪製,而不是使用默認漸變效果。在Windows Classic(pre-Aero)主題下它不會那麼明顯,因爲實際上的按鈕是用平面3D控制顏色繪製的。但Aero增加了漸變和其他「熱」效果,這使得它像拇指一樣突出。

要清除已設置的值並恢復屬性的環境屬性,可以右鍵單擊屬性窗口中的屬性,然後選擇「重置」。你也可以做到這一點通過代碼通過設置屬性爲default(Color)

myButton.BackColor = default(Color); 

您還需要將UseVisualStyleBackColor屬性設置回true,它被自動設置爲false每當BackColor屬性更改爲支持自定義背景顏色。

或者,您可以告訴WinForms忽略這樣的定製屬性,並要求Windows繪製按鈕控件。通過將FlatStyle屬性設置爲FlatStyle.System來完成此操作。

再次,這可以在設計者或代碼中完成。這不僅會阻止你改變背景顏色等愚蠢的東西,創建一個可怕的醜陋控件,而且它還會將Win32按鈕控件的原生行爲恢復到WinForms應用程序,包括懸停時微妙的Aero淡入淡出效果。

我不知道爲什麼這不是默認值。你應該提出一個特別的要求來獲得醜陋和非標準的控制。這不應該只是自動發生。我只能假設這是對VB 6程序員的讓步,他們多年來一直能夠做出各種醜陋的控制。

+1

* default(Color)*的相應VB.NET版本是什麼? –

+1

@PeterMortensen:'New Color()'爲我工作。 – Neolisk

+0

FlatStyle很棒。 – Vlad

10

當您更改默認背景顏色時,它會將UseVisualStyleBackColor屬性翻轉爲false。

只需將其修改爲true即可設置!

0

參照您的問題標題,「如何重置爲默認按鈕BackColor?」,我解決我的問題是:

創建另一個按鈕,說ButtonFoo,並將其設置爲不可見,

ButtonFoo.visible = False 

,您可以使用該按鈕來獲得它的顏色(因爲它是默認的顏色)以重置您的另一個按鈕顏色,例如,

ButtonChangedColor.BackColor = ButtonFoo.BackColor 

你走了;顏色恢復到默認值:)

7

要恢復按鈕的默認背景顏色,請使用;

Button1.BackColor = SystemColors.ButtonFace 
Button1.UseVisualStyleBackColor = True 
3

什麼工作對我來說:

CommandButton1.BackColor = vbButtonFace 
2
Button1.BackColor = Color.FromKnownColor(KnownColor.Control) 

使用FromKnowColor訪問系統顏色。 真的很簡單。

0

要恢復默認的背景和前景的按鈕使用:

Button1.BackColor = SystemColors.ButtonFace; 
Button1.ForeColor = default(Color); 
Button1.UseVisualStyleBackColor = true;