2010-11-17 14 views
7

Para un proyecto actual, necesitaba un menú desplegable con nombres de colores (cadenas) con un pequeño cuadrado de ejemplo del color al lado (imagen). Entonces, pude diseñar un ComboBox personalizado para lograr esto. Sin embargo, tengo un problema ... cuando selecciono un elemento de la lista, el ejemplo de color no aparece, solo el nombre del color. (Ver ejemplos a continuación)Dibujando imágenes dentro de un ComboBox personalizado

Menú Ampliado:

alt text

Después del tema que se elija:

alt text

Para dibujar los colores junto a las cuerdas para empezar, usado:

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

Donde un DropDownItem contenía la imagen y la cadena que se dibujaría. Entonces ... ¿alguien sabe lo que debo anular o lo que debo hacer para que el ComboBox dibuje la imagen y la cadena, al igual que cuando la lista se expande, cuando se selecciona un elemento?

Muchas gracias; ¡Salud!

Respuesta

7

Conjunto DropDownStyle-DropDownList; de forma predeterminada, ComboBox usa un TextBox para mostrar el elemento seleccionado. Esta es la razón por la que el elemento seleccionado se muestra de forma diferente a los elementos desplegables.

+0

¡Perfecto! Eso funciona maravillosamente! Muchas gracias. No tenía idea de que el control simplemente estaba usando un objeto TextBox en la parte superior; eso parece una implementación interesante (y no instintiva). – JToland

0
+0

De hecho, no puedo ver nada de lo que está haciendo el escritor de ese artículo que yo no estoy haciendo ... De hecho, lo analicé un poco más y estoy seguro de que su solución tendría el mismo problema ya tengo. Si miras la primera imagen de ese artículo, puedes ver que el elemento seleccionado en realidad no tiene el cuadro/cuadrado de color al lado. – JToland

0

También tiene que anular OnPaint de forma similar a su método OnDrawItem para que esto funcione.

Cuestiones relacionadas