2011-06-24 13 views
19

W aplikacji WinForm działającej w systemie Windows 7 chcę zmienić kolor tła comboboxa, aby go podświetlić. Comboxbox ma DropDownStyle z DropDownList.Jak zmienić kolor tła combobox (nie tylko z rozwijanej listy)

Kiedy programowo zmieniam właściwość BackColor na czerwony, tylko tło rzeczywistej rozwijanej listy zostanie zmienione na czerwony. Gdy lista rozwijana nie zostanie otwarta, tło combobox wyświetlające wybraną wartość pozostaje szare. Co mogę zrobić, aby również stała się czerwona?

Ustawienie właściwości BackColor działa poprawnie, gdy aplikacja działa w systemie Windows XP

Odpowiedz

14

To powinno Ci zacząć.

zmienić właściwość combobox trybRysowania do OwnerDrawFixed i obsłużyć zdarzenia DrawItem:

private void comboBox1_DrawItem(object sender, DrawItemEventArgs e) 
{ 
    int index = e.Index >= 0 ? e.Index : 0; 
    var brush = Brushes.Black; 
    e.DrawBackground(); 
    e.Graphics.DrawString(comboBox1.Items[index].ToString(), e.Font, brush, e.Bounds, StringFormat.GenericDefault); 
    e.DrawFocusRectangle(); 
} 

Kolor tła będzie prawo ale styl z pudełka będzie płaski, a nie jak zwykle w stylu 3D.

+6

Dzięki, że to dobry początek. Czy ktoś wie, jak zmienić kolor tła i zachować styl 3D? – JBB

+0

Bardzo pomocna! Dziękuję Ci. Musiałem dodać ... jeśli (e.Indeks == -1) powrócić; --- podczas pobierania "System.ArgumentOutOfRangeException". Byłoby również miło zmienić kolor tła, gdy jest on skupiony. –

6

Ponieważ mimo wszystko tracisz efekty 3D dzięki rozwiązaniu Igby Largemana, lepiej jest zmienić właściwość FlatStyle na Flat. Kolor tła wydaje się być przestrzegany nawet w Windows 7 w ten sposób i bez ponownego wdrażania jakichkolwiek zdarzeń niskiego poziomu.

Uważam, że jest to błąd ze strony Microsoftu ...

+0

Powoduje to bardzo różny wygląd, a także powoduje dość irytujące migotanie artefaktów. –

+0

Daje mi problem w systemie Windows Server 2012 R2. To samo działało dobrze na Windows Server 2008. Zmienia się tryb 'FlatStyle' na' Flat'. Uratowałeś mi dzień w bardzo ważnym momencie. – RBT

Powiązane problemy