Lo necesito con el fin de identificar algunos items dentro del ListBox!
Estuve mirando y que carajos, estoy muy oxidado en C# :-\, como se haría?
If NOT
Básicamente es lo que te ha comentado $Edu$, hacer la comparación inversa de como lo estés haciendo, pero un ListBox no contiene atributos para modificar lo que requieres. Sólamente puedes modificar el color de fondo dibujando manuálmente los items, y si encima quieres extender la funcionalidad para colorear ciertos Items eso requiere un poco más de código.
Yo te recomiendo que te olvides del ListBox y utilices un ListView, ya que se puede asemejar bastante a un ListBox si lo configuras corréctamente, y además puedes modificar el color de los item(s) que quieras sin necesidad de handlear los eventos de dibujo:
(http://img19.imageshack.us/img19/2321/hnvr.png)
Dim Random_Color As New Random ' No es necesario, pero lo usaré en este ejemplo para colorear de forma aleatoria.
Private Sub Test() ' Handles MyBase.Load
' Selecciono la vista "Detalles"
ListView1.View = View.Details
' Agrego una columna
ListView1.Columns.Add("Items:")
' Agrego unos cuantos items
ListView1.Items.AddRange("A B C D E F".Split().Select(Function(x) New ListViewItem(x)).ToArray)
' Coloreo cada item de forma aleatoria:
For Each Item As ListViewItem In ListView1.Items
Item.BackColor = Color.FromArgb(Random_Color.Next(1, 999999999))
Next
End Sub
Item.BackColor = Color
Así de facil.
Pero bueno, si prefieres hacerlo con un ListBox, aquí te muestro un ejemplo que hice en VB.NET:
[youtube=640,360]http://www.youtube.com/watch?v=0W7iQMo1D1A[/youtube]
Public Class Form1
' Para seleccionar de forma rápida los items que quiero colorear
Private Enum Colorize_ListBox_Items As Short
Selected = 0
Non_Selected = 1
All = 2
None = 3
End Enum
' Aquí almaceno el color que usaré.
Dim ListBox_Color As Brush
Private Sub Test() Handles MyBase.Shown
' Añado unos cuantos Items
ListBox1.Items.AddRange("A B C D E".Split())
' Selecciono un item
ListBox1.SelectedIndex = (ListBox1.Items.Count \ 2)
' Seteo el modo de dibujo manual
ListBox1.DrawMode = DrawMode.OwnerDrawFixed
' Coloreo el item seleccionado
Colorize_Item(ListBox1, Colorize_ListBox_Items.Selected, Brushes.YellowGreen)
' ...O coloreo los items NO seleccionados
Colorize_Item(ListBox1, Colorize_ListBox_Items.Non_Selected, Brushes.Red)
' ...O coloreo todos los items
Colorize_Item(ListBox1, Colorize_ListBox_Items.Non_Selected, Brushes.Yellow)
' ...O no coloreo ningun item
Colorize_Item(ListBox1, Colorize_ListBox_Items.None, Nothing)
' ...O coloreo algunos Items específicos
Colorize_Item(ListBox1, {0, (ListBox1.Items.Count \ 2), (ListBox1.Items.Count - 1)}, Brushes.HotPink)
End Sub
Private Sub Colorize_Item(ByVal ListBox As ListBox, _
ByVal Items As Colorize_ListBox_Items, _
ByVal Brush_Color As Brush)
' En la propiedad "Tag" almaceno el valor de la enumeración.
ListBox.Tag = Items.ToString
' Almaceno el color
ListBox_Color = Brush_Color
ListBox.Invalidate() ' Refresco los cambios
End Sub
Private Sub Colorize_Item(ByVal ListBox As ListBox, _
ByVal Items As Integer(), _
ByVal Brush_Color As Brush)
' En la propiedad "Tag" almaceno los índices de los items.
ListBox.Tag = String.Join(ChrW(Keys.Space), Items)
' Almaceno el color
ListBox_Color = Brush_Color
ListBox.Invalidate() ' Refresco los cambios
End Sub
Private Sub ListBox1_DrawItem(ByVal sender As Object, ByVal e As DrawItemEventArgs) _
Handles ListBox1.DrawItem
e.DrawBackground()
Select Case sender.tag
Case Colorize_ListBox_Items.Selected.ToString ' Colorize Selected Items
If (e.State And DrawItemState.Selected) = DrawItemState.Selected Then
e.Graphics.FillRectangle(ListBox_Color, e.Bounds)
End If
Case Colorize_ListBox_Items.Non_Selected.ToString ' Colorize Non-Selected Items
If (e.State And DrawItemState.Selected) = DrawItemState.None Then
e.Graphics.FillRectangle(ListBox_Color, e.Bounds)
End If
Case Colorize_ListBox_Items.All.ToString ' Colorize all
e.Graphics.FillRectangle(ListBox_Color, e.Bounds)
Case Colorize_ListBox_Items.None.ToString ' Colorize none
Dim DefaultColor As SolidBrush = New SolidBrush(ListBox.DefaultBackColor)
e.Graphics.FillRectangle(DefaultColor, e.Bounds)
DefaultColor.Dispose()
Case Else ' Colorize at specific index
If Not String.IsNullOrEmpty(sender.tag) _
AndAlso sender.tag.ToString.Split.Contains(e.Index.ToString) Then
e.Graphics.FillRectangle(ListBox_Color, e.Bounds)
End If
End Select
Using b As New SolidBrush(e.ForeColor)
e.Graphics.DrawString(ListBox1.GetItemText(ListBox1.Items(e.Index)), e.Font, b, e.Bounds)
End Using
e.DrawFocusRectangle()
End Sub
End Class
Ahora es tu trabajo intentar traducirlo a C# (Hay cnvertidores online), o esperar la respuesta de NovLucker o alguno de los grandes de C#.
Saludos!
Oka entiendo, intentaré con el ListView era mi otra opción :p