2013-04-10 10 views
5

chcę zmienić kolor elementu, który zawiera konkretny ciągZmiana koloru konkretnej pozycji na polu listy, która zawiera specyficzny ciąg na drawitem

Private Sub ListBox2_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ListBox2.DrawItem 
    e.DrawBackground() 
    If DrawItemState.Selected.ToString.Contains("specific string") Then 
     e.Graphics.FillRectangle(Brushes.LightGreen, e.Bounds) 
    End If 

    e.DrawFocusRectangle() 

to jest mój kod, ale nie działa

+1

Wyjaśnij "nie działa" bardziej wyraźnie. Potrzebujemy bardziej "spesific" opis tego, co jest nie tak. Czy cokolwiek się w ogóle zdarza? Jeśli nie, czy umieściłeś tam punkt przerwania lub zapis logu, aby mieć pewność, że zdarzenie się uruchomi? –

+1

Czy ustawiłeś właściwość 'DrawMode' na' DrawMode.OwnerDrawFixed' lub 'DrawMode.OwnerDrawVariable'? – Steve

Odpowiedz

9

porządku, najpierw musisz ustawić właściwość DrawMode w polu listy na "OwnerDrawFixed" zamiast Normal. W przeciwnym razie nigdy nie zostanie wydane zdarzenie DrawItem. Kiedy to się stanie, wszystko jest całkiem proste.

Private Sub ListBox1_DrawItem(sender As System.Object, e As System.Windows.Forms.DrawItemEventArgs) Handles ListBox1.DrawItem 
    e.DrawBackground() 

    If ListBox1.Items(e.Index).ToString() = "herp" Then 

     e.Graphics.FillRectangle(Brushes.LightGreen, e.Bounds) 
    End If 
    e.Graphics.DrawString(ListBox1.Items(e.Index).ToString(), e.Font, Brushes.Black, New System.Drawing.PointF(e.Bounds.X, e.Bounds.Y)) 
    e.DrawFocusRectangle() 
End Sub 

Będziesz musiał dotknąć tego z różnymi kolorami, jeśli wybrano. Ale to powinno wystarczyć, abyś dalej pracował. Byłeś blisko, miej to na uwadze. :)

+0

+1. Próbowałem - działa. – Neolisk

+0

jeśli mój stan jest dynamiczny, to jak mogę to zrobić ... oznacza, że ​​im przekazuję ListBox1.Items [e.index] .tostring() do mojego db i chcę sprawdzić, czy zwracana wartość jest pusta, a zmiana koloru na czarny w innym razie czerwony. – user3217843

+0

Wystarczy zmienić instrukcję if, aby sprawdzić IsDbNull lub Is Nothing na zwróconej wartości – WozzeC

Powiązane problemy