2010-11-17 8 views
7

Pour un projet en cours, j'avais besoin d'un menu déroulant avec des noms de couleur (chaînes) avec un petit exemple de carré de couleur à côté (image). Donc, j'ai été capable de concevoir un ComboBox personnalisé pour y parvenir. Cependant, j'ai un problème .... quand je choisis un article de la liste, l'exemple de couleur n'apparaît pas, seulement le nom de la couleur fait. (Voir les exemples ci-dessous)Dessin d'images dans une zone de liste déroulante personnalisée

Expanded Menu:

alt text

Après le point est choisi:

alt text

Afin de tirer les couleurs à côté des cordes pour commencer, je utilisé:

// 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); 
    } 

Où un DropDownItem contenait l'image et la chaîne à dessiner. Alors ... est-ce que quelqu'un sait ce que je dois contourner ou ce que je dois faire pour que ComboBox dessine l'image et la chaîne à la fois, comme il le fait déjà quand la liste est développée, quand un élément est sélectionné?

Merci beaucoup; À la votre!

Répondre

7

Set DropDownStyle-DropDownList; Par défaut, ComboBox utilise un TextBox pour afficher l'élément sélectionné. C'est pourquoi l'élément sélectionné s'affiche différemment des éléments déroulants.

+0

Parfait! Cela fonctionne magnifiquement! Merci beaucoup. Je n'avais aucune idée que le contrôle utilisait simplement un objet TextBox en haut; Cela semble être une implémentation intéressante (et non-intuitive). – JToland

0
+0

En fait, je ne peux rien voir de ce que l'auteur de cet article fait que je ne fais pas déjà ... En fait, je l'ai juste regardé plus et je suis sûr que sa solution aurait le même problème J'ai déjà. Si vous regardez la première image de cet article, vous pouvez voir que l'élément sélectionné n'a pas réellement la couleur carrée/image à côté de lui. – JToland

0

Vous devez également remplacer OnPaint d'une manière similaire à votre méthode OnDrawItem pour que cela fonctionne.

Questions connexes