2010-11-17 8 views
7

Per un progetto corrente, avevo bisogno di un menu a discesa con i nomi dei colori (stringhe) con un piccolo quadrato di esempio del colore accanto (immagine). Quindi, sono stato in grado di progettare un ComboBox personalizzato per ottenere questo risultato. Tuttavia, sto riscontrando un problema ... quando seleziono un elemento dall'elenco, l'esempio di colore non viene visualizzato, solo il nome del colore. (Vedi esempi qui sotto)Disegno di immagini all'interno di un ComboBox personalizzato

menu espanso:

alt text

Dopo il punto è scelto:

alt text

Al fine di richiamare i colori vicino alle corde per cominciare, ho utilizzato:

// Draws the items into the ColorSelector object 
    protected override void OnDrawItem(DrawItemEventArgs e) 
    { 
     e.DrawBackground(); 
     e.DrawFocusRectangle(); 

     DropDownItem item = (DropDownItem)Items[e.Index]; 
     // Draw the colored 16 x 16 square 
     e.Graphics.DrawImage(item.Image, e.Bounds.Left, e.Bounds.Top); 
     // Draw the value (in this case, the color name) 
     e.Graphics.DrawString(item.Value, e.Font, new 
       SolidBrush(e.ForeColor), e.Bounds.Left + item.Image.Width, e.Bounds.Top + 2); 

     base.OnDrawItem(e); 
    } 

Dove DropDownItem conteneva l'immagine e la stringa da disegnare. Quindi ... qualcuno sa che cosa ho bisogno di sovrascrivere o cosa devo fare per far sì che ComboBox disegni sia l'immagine che la stringa, proprio come fa già quando l'elenco è espanso, quando viene selezionato un elemento?

Grazie mille; Cheers!

risposta

7

Set DropDownStyle-DropDownList; per impostazione predefinita, ComboBox utilizza uno TextBox per visualizzare l'elemento selezionato. Questo è il motivo per cui l'elemento selezionato viene visualizzato diversamente dagli elementi a discesa.

+0

Perfetto! Funziona magnificamente! Grazie mille. Non avevo idea che il controllo stava semplicemente usando un oggetto TextBox in cima; sembra un'implementazione interessante (e non intuitiva). – JToland

0
+0

In realtà non riesco a vedere nulla che lo scrittore di quell'articolo stia facendo che non sto già facendo .... In realtà, l'ho appena guardato e sono sicuro che la sua soluzione avrebbe lo stesso problema I già hanno. Se guardi la prima immagine in quell'articolo, puoi vedere che l'elemento selezionato non ha effettivamente il quadrato/l'immagine a colori accanto. – JToland

0

È inoltre necessario eseguire l'override di OnPaint in modo simile al metodo OnDrawItem affinché funzioni.

Problemi correlati