2011-06-24 23 views
19

In un'applicazione winform in esecuzione su Windows 7 Voglio cambiare il colore di sfondo di una casella combinata per evidenziarlo. La casella combox ha un DropDownStyle di DropDownList.Come cambiare il colore di sfondo della casella combinata (non solo la parte dell'elenco a discesa)

Quando si modifica a livello di codice la proprietà BackColor su Rosso, solo lo sfondo dell'elenco a discesa reale viene modificato in Rosso. Quando l'elenco a discesa non è aperto, lo sfondo della casella combinata che mostra il valore selezionato rimane grigio. Cosa posso fare in modo che diventi troppo rosso?

Impostare la proprietà BackColor funziona bene quando un'applicazione viene eseguito su Windows XP

risposta

14

Questo dovrebbe iniziare.

Modificare la proprietà ComboBox DrawMode a OwnerDrawFixed, e gestire l'evento 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(); 
} 

Il colore di sfondo sarà giusto, ma lo stile della scatola sarà piatta, non il solito stile 3D.

+6

Grazie, è un buon inizio. Qualcuno sa come cambiare il colore di sfondo e preservare lo stile 3D? – JBB

+0

Molto utile! Grazie. Ho dovuto aggiungere ... if (e.Index == -1) return; --- come ho ottenuto un 'System.ArgumentOutOfRangeException' durante il caricamento. Inoltre, sarebbe bello cambiare il colore dello sfondo quando focalizzato. –

6

Poiché si perdono comunque gli effetti 3D con la soluzione di Igby Largeman, è meglio cambiare la proprietà FlatStyle in Flat. Il colore di sfondo sembra essere rispettato anche in Windows 7 in questo modo e senza re-implementare eventi di basso livello.

Considererei questo un errore da parte di Microsoft ...

+0

Ne risulta un aspetto molto diverso e anche alcuni artefatti sfarfallio piuttosto fastidiosi. –

+0

Mi stava dando un problema su Windows Server 2012 R2. Lo stesso funzionava bene su Windows Server 2008. Il cambio di 'FlatStyle' su' Flat' funziona. Mi hai salvato la giornata in un momento cruciale. – RBT

Problemi correlati