Con el siguiente código vamos a poder colorear el fondo de los elementos de un combo.
Supongamos que tenemos un combo llamado cboColor con 9 elementos sin texto. Simplemente queremos tener cada elemento coloreado de un color determinado.
Implementaremos el evento DrawItem del combo de la siguiente manera:
Private Sub cboColor_DrawItem(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles cmbColor.DrawItem
Select Case e.Index
Case 0
‘Blanco
e.Graphics.FillRectangle(Brushes.White, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)
Case 1
‘azul
e.Graphics.FillRectangle(Brushes.LightCyan, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)
Case 2
‘amarillo
e.Graphics.FillRectangle(Brushes.Yellow, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)
Case 3
‘rosa
e.Graphics.FillRectangle(Brushes.LightPink, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)
Case 4
‘gris
e.Graphics.FillRectangle(Brushes.LightGray, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)
Case 5
‘naranja
e.Graphics.FillRectangle(Brushes.Orange, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)
Case 6
‘verde claro
e.Graphics.FillRectangle(Brushes.LightGreen, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)
Case 7
‘salmón
e.Graphics.FillRectangle(Brushes.Salmon, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)
Case 8
‘rojo
e.Graphics.FillRectangle(Brushes.Red, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)
End Select
End Sub
Select Case e.Index
Case 0
‘Blanco
e.Graphics.FillRectangle(Brushes.White, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)
Case 1
‘azul
e.Graphics.FillRectangle(Brushes.LightCyan, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)
Case 2
‘amarillo
e.Graphics.FillRectangle(Brushes.Yellow, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)
Case 3
‘rosa
e.Graphics.FillRectangle(Brushes.LightPink, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)
Case 4
‘gris
e.Graphics.FillRectangle(Brushes.LightGray, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)
Case 5
‘naranja
e.Graphics.FillRectangle(Brushes.Orange, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)
Case 6
‘verde claro
e.Graphics.FillRectangle(Brushes.LightGreen, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)
Case 7
‘salmón
e.Graphics.FillRectangle(Brushes.Salmon, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)
Case 8
‘rojo
e.Graphics.FillRectangle(Brushes.Red, e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height)
End Select
End Sub
La idea es pintar un rectángulo opaco del color determinado, y que esté localizado en la posición exacta del elemento del cómbo. La posición y las dimensiones del ítem las obtenemos mediante e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height.
Nota: Debemos fijar la propiedad DrawMode del combo al valor OwnerDrawVariable.