Con este código vamos a poder colorear el fondo de los elementos de un objeto de la clase ComboBox.
Supongamos un objeto llamado cmbEjemplo, de la clase ComboBox, con 3 ítems, y cada uno tendrá un color diferente. En el ejemplo se va a mantener el texto de cada uno de los ítems.
Tenemos que programar el evento DrawItem del objeto cmbEjemplo de la siguiente manera:
private void cmbEjemplo_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(cmbEjemplo.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds);
break;
case 1:
e.Graphics.FillRectangle(Brushes.Green, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height);
e.Graphics.DrawString(cmbEjemplo.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds);
break;
case 2:
e.Graphics.FillRectangle(Brushes.Blue, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height);
e.Graphics.DrawString(cmbEjemplo.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds);
break;
}
}
{
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(cmbEjemplo.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds);
break;
case 1:
e.Graphics.FillRectangle(Brushes.Green, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height);
e.Graphics.DrawString(cmbEjemplo.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds);
break;
case 2:
e.Graphics.FillRectangle(Brushes.Blue, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height);
e.Graphics.DrawString(cmbEjemplo.Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds);
break;
}
}
Nota: Debemos fijar la propiedad DrawMode del combo al valor OwnerDrawVariable.