lunes, 29 de octubre de 2012

Csharp Colores en combo desplegable

COLORES EN COMBO DESPLEGABLE CSHARP

Hola a todos.

Aquí explico como aplicar formato de colores a los diferentes elementos de un control combo box, que los puedes utilizar tambien en controles de lista o list box.

Ejemplo 1


Vamos al código. (evento DrawItem)

private void combo1_DrawItem(object sender, DrawItemEventArgs e){
if (e.Index == -1)
return;
ComboBox combo = ((ComboBox)sender);
SolidBrush sa = new SolidBrush(e.ForeColor);
using (SolidBrush brush = new SolidBrush(e.ForeColor)){

Font font = e.Font;
Color micolor = e.ForeColor;
if (e.Index == 0){

//font = new System.Drawing.Font(font, FontStyle.Bold);sa = new SolidBrush(Color.Red);}

if (e.Index == 1){
sa = new SolidBrush(Color.Green);}
if (e.Index == 2){
sa = new SolidBrush(Color.Blue);}
if (e.Index == 3){
sa =new SolidBrush(Color.Yellow);}
if (e.Index == 4){
sa = new SolidBrush(Color.Orange);}
if (e.Index == 5){
sa = new SolidBrush(Color.Violet);}
if (e.Index == 6){
sa = new SolidBrush(Color.Black);}
if (e.Index == 7){
sa = new SolidBrush(Color.Brown);}
e.DrawBackground();
e.Graphics.DrawString(combo.Items[e.Index].ToString(), font, sa, e.Bounds);
e.DrawFocusRectangle();
}
}

Ahora solo configurar la siguiente propiedades del combo1

DrawMode en OwnerDrawFixed

y en el evento load del formulario

private void Form1_Load(object sender, EventArgs e)
{
combo1.Items.Add("Rojo");
combo1.Items.Add("Verde");
combo1.Items.Add("Azul");
combo1.Items.Add("Amarillo");
combo1.Items.Add("Naranja");
combo1.Items.Add("Violeta");
combo1.Items.Add("Negro");
combo1.Items.Add("Marrn");
}

Eso es todo, muy sencillo


Ejemplo 2



Vamos al código. (solo hago la muestra para los 6 primeros colores, evento DrawItem)

private void combo2_DrawItem(object sender, DrawItemEventArgs e){

switch (e.Index){

case 0:
e.Graphics.FillRectangle(Brushes.Red, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height);
e.Graphics.DrawString(combo2.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds);
break;
case 1:
e.Graphics.FillRectangle(Brushes.IndianRed, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height);
e.Graphics.DrawString(combo2.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds);
break;
case 2:e.Graphics.FillRectangle(Brushes.MediumVioletRed, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height);
e.Graphics.DrawString(combo2.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds);
break;
case 3:e.Graphics.FillRectangle(Brushes.OrangeRed, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height);
e.Graphics.DrawString(combo2.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds);
break;
case 4:e.Graphics.FillRectangle(Brushes.PaleVioletRed, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height);
e.Graphics.DrawString(combo2.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds);
break;
case 5:e.Graphics.FillRectangle(Brushes.Green, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height);
e.Graphics.DrawString(combo2.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds);
break;}
}

Ahora solo configurar la siguiente propiedades del combo2

DrawMode en OwnerDrawFixed

y en el evento load del formulario

private void Form1_Load(object sender, EventArgs e)

{
combo2.Items.Add(
"Rojo");
combo2.Items.Add("Rojo indio");
combo2.Items.Add("Rojo violeta mediano");
combo2.Items.Add("Rojo naranja");
combo2.Items.Add("Rojo violeta palido");
combo2.Items.Add("Verde");
}

Eso es todo, muy sencillo

Espero sus comentarios

No hay comentarios:

Publicar un comentario