Colorear los elementos de un combo

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

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.

Quizá te interese...