Los items de los combobox en windows forms no se les puede definir el color del foreground y background.
Si los objetos que se ponden son del tipo ListViewItem, entonces se puede usar el evento comboBox.DrawItem para dibujarles los colores, con lo siguiente:
void OnDrawItem(object sender, DrawItemEventArgs e)
{
if (e.Index<0)
return;
Graphics g = e.Graphics;
Rectangle r = e.Bounds ;
e.DrawBackground();
Color textColor = SystemColors.ControlText; //Queda con etse color
if (e.State == (DrawItemState.Focus | DrawItemState.Selected ) )
textColor = SystemColors.HighlightText;
if (e.State == DrawItemState.None)
textColor = SystemColors.WindowText;
ListViewItem item = combo.Items[e.Index] as ListViewItem;
if (item.ForeColor != SystemColors.WindowText)
textColor = item.ForeColor;
//Rectangulo interno
// Rectangle rectangle = new Rectangle(2, e.Bounds.Top+2, e.Bounds.Height, e.Bounds.Height-4);
// e.Graphics.FillRectangle(new SolidBrush(Color.Salmon), rectangle);
g.DrawString(item.ToString(), new Font("Ariel", 8), new SolidBrush(textColor), r);
e.DrawFocusRectangle();
}
O más simple aún, reemplazar OnDrawItem:
public class ColorComboBox : ComboBox
{
protected override void OnDrawItem(DrawItemEventArgs e)
{
base.OnDrawItem (e);
if (e.Index<0)
return;
Control item = this.Items[e.Index] as Control;
if (item==null)
return;
Graphics g = e.Graphics;
Rectangle r = e.Bounds ;
if (item.ForeColor != SystemColors.WindowText)
g.DrawString(item.ToString(), Parent.Font, new SolidBrush(item.ForeColor), r);
}
}
28-03-2009
Suscribirse a:
Entradas (Atom)