2011-05-24 20 views
1

我已經找到了以下解決方案: 如果我把在設計師是否能夠更改禁用的組合框BackColor的錯誤或功能?

this.comboBox1.BackColor = System.Drawing.Color.White; //or any other color 
this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; //it has to be that style 

我能夠改變的comboBox1顏色 - 它不會永遠是灰色的。

它應該是DropDownList和BackColor應該放在設計器中。

它是一個錯誤或功能?

+0

那麼有很多人在這些論壇上發問,只是發現了你的內容。所以我相信他們會把它稱爲一個功能。 – 2011-05-24 17:44:19

回答

1

一個禁用的控件有一個默認BackColor = Color.Grey。它的目的是改變。

編輯:

我相信這只是'簡單'。是的,當您開始自定義顏色時,必須提供代碼以在所有狀態下設置控件的屬性。以這種方式來思考:.Net假定如果你要定製一個屬性,你總是負責設置屬性。

衍生自Control class,comboBox1暴露了Control.EnabledChanged事件。這是您的邏輯需要實現的位置,以便爲啓用和禁用狀態設置您自己的默認值;例如:

private void radioButton1_EnabledChanged(object sender, EventArgs e) 
{ 
    if (((ComboBox)sender).Enabled) 
    { 
     // set BackColor for enabled state 
    } 
    else 
    { 
     // set BackColor for disabled state 
    } 
} 
+0

我認爲它並不那麼簡單: – 2011-05-25 07:34:38

+0

1)當啓用狀態改變時,BackColor不會改變。 2)BackColor有一個奇怪的問題:當我在屬性窗口中更改它的默認顏色,並在此之後將其更改回來 - 默認顏色保留在設計器中 - 您可以看到它變粗。對於其他屬性不會發生 - 當它恢復到默認值時 - 該值將獲得常規字體,即從設計器中刪除。 – 2011-05-25 07:52:14

+0

你是對的,我可以設置另一個背景顏色,但只有當組合框是下拉列表,並且其默認背景顏色是在設計器或表單加載事件中設置的,當組合框爲真時,您實際上可以看到另一個背景顏色禁用。它甚至足以設置:ComboBox1.BackColor = ComboBox1.BackColor;因爲即使沒有變化,控制也會以某種方式響應該組。請檢查一下。 (我不是C#的初級... – 2011-05-25 15:01:25

3

進行自定義組合框,然後在WndProc爲殘疾控件設置BackColor

public class ComboBoxCustom : ComboBox { 
    [DllImport("gdi32.dll")] 
    internal static extern IntPtr CreateSolidBrush(int color); 

    [DllImport("gdi32.dll")] 
    internal static extern int SetBkColor(IntPtr hdc, int color); 

    protected override void WndProc(ref Message m){ 
     base.WndProc(ref m); 
     IntPtr brush; 
     switch (m.Msg){ 

      case (int)312: 
       SetBkColor(m.WParam, ColorTranslator.ToWin32(this.BackColor)); 
       brush = CreateSolidBrush(ColorTranslator.ToWin32(this.BackColor)); 
       m.Result = brush; 
       break; 
      default: 
       break; 
     } 
    } 
} 
+0

我一直在尋找這個東西有多久了,感謝Milos! – LuckyLuke82 2017-08-10 19:32:15

2

的DropDownList會允許背景色的變化,無需設置顏色的設計,只是在組合框屬性設置爲DropDownList在屬性窗格中。