ListBox abwechselnd farblich hinterlegen!

    • VB.NET

    Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Günni.

      ListBox abwechselnd farblich hinterlegen!

      Hallo zusammen,

      Habe hier einen kleinen Code gebastelt mitdem Ihr eine ListBox abwechselnd farblich hinterlegen könnt!
      Ich dachte mir vielleicht kann es ja noch jemand gebrauchen! :D

      Benötigt wird: 1x ListBox, 1x CheckBox

      ListBox1:

      In den Eigenschaften stellt Ihr den Punkt DrawMode auf OwnerDrawFixed

      CheckBox1:

      VB.NET-Quellcode

      1. 'Hier wird die ListBox Neu gezeichnet bei Druck auf die CheckBox
      2. Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
      3. 'ListBox Neu Zeichnen
      4. ListBox1.Refresh()
      5. End Sub


      Danach müßt Ihr das Neu Zeichnen manuell modifizieren:

      VB.NET-Quellcode

      1. 'ListBoxItems Zeichnen manuell modifizieren (ListBoxDrawMode muß auf OwnerDrawFixed gestellt sein)
      2. Private Sub OnDrawItem(ByVal sender As Object, ByVal e As DrawItemEventArgs) Handles ListBox1.DrawItem
      3. 'Schriftfarbe zuweisen
      4. Dim Schriftfarbe As String = "Black"
      5. 'Item und Itembegrenzungen ermitteln
      6. Dim Item As Object
      7. Dim Itembegrenzung As Rectangle = e.Bounds
      8. 'Hier wird der Itemindex ermittelt, wenn negativ auf Null gesetzt
      9. Try
      10. 'Index des jeweiligen Items zuweisen
      11. Item = ListBox1.Items(e.Index)
      12. Catch ex As Exception
      13. 'Wenn negativ auf Null stellen
      14. Item = CObj("0")
      15. End Try
      16. 'Prüfen ob jeweiliges Item farblich Hinterlegt wird
      17. If (e.State And DrawItemState.Selected) = DrawItemState.Selected Then
      18. 'Wenn Selektiert wird es hervorgehoben
      19. e.Graphics.FillRectangle(SystemBrushes.Highlight, Itembegrenzung)
      20. 'Schriftfarbe zuweisen
      21. Schriftfarbe = "White"
      22. ElseIf ListBox1.Items.IndexOf(Item) Mod 2 = 0 Then
      23. 'Wenn Zeile gerade wird es nicht hinterlegt
      24. e.Graphics.FillRectangle(SystemBrushes.Window, Itembegrenzung)
      25. 'Schriftfarbe zuweisen
      26. Schriftfarbe = "black"
      27. Else
      28. 'Wenn Zeilen nicht gerade und nicht selektiert
      29. 'Prüfen ob Zeilen hinterlegen aktiviert ist
      30. If Me.CheckBox1.Checked = True Then
      31. 'Wenn aktiviert hinterlegen
      32. e.Graphics.FillRectangle(Brushes.Moccasin, Itembegrenzung)
      33. ElseIf Me.CheckBox1.Checked = False Then
      34. 'Wenn deaktiviert nicht hinterlegen
      35. e.Graphics.FillRectangle(SystemBrushes.Window, Itembegrenzung)
      36. End If
      37. 'Schriftfarbe zuweisen
      38. Schriftfarbe = "black"
      39. End If
      40. 'Stift aktivieren und Stiftfarbe zuweisen
      41. Dim Stiftart As New SolidBrush(Color.FromName(Schriftfarbe))
      42. 'Schriftart und Schriftstil festlegen
      43. Dim Schriftart As Font
      44. Schriftart = New Font(e.Font, FontStyle.Regular)
      45. 'Aktuelles Item modifiziert Zeichnen
      46. e.Graphics.DrawString(Item, Schriftart, Stiftart, Itembegrenzung.X, Itembegrenzung.Y)
      47. 'Stift und Schriftstil zurücksetzen
      48. Stiftart.Dispose()
      49. Schriftart.Dispose()
      50. End Sub


      So ich hoffe mal das jemand damit was anfangen kann!

      Greetz Euer Günni 8-)
      Hallöchen,
      scheint wirklich nicht schlecht zu sein :)
      aber i-wie bin ich wohl in dem bereich noch ein ziemlicher anfänger... was muss ich z. b. für stiftart eingeben?
      komme i-wie noch nicht so ganz klar mit dem code... ich probiere gern aus, aber hier komm ich nicht wirklich weiter...
      danke für eure hilfe
      greets
      hey günni,
      oki... das war's wohl... hatte in der listbox nix drin -.-" *LOL*

      aber ich versteh immernoch net ganz, welchen sinn oder was man mit der stiftart macht...

      wie kann man denn die farbe ändern, die abwechselnd den hintergrund färbt?
      sry, ich hab zwar ein bisschen was aus der schule mitgenommen, aber ich bin kein profi... und das haben wir auch nicht gemacht, noch nicht vermutlich...
      greets :)
      Die Stiftart muß zugewiesen werden da du das automatisch neuzeichnen überschreibst und es manuell machst!
      Du weißt Quasi deinen PC an die Listbox nach deinen Wünschen neu zu zeichnen.

      Die Hinterlegungsfarbe änders du in diesen Befehlen hier:

      VB.NET-Quellcode

      1. e.Graphics.FillRectangle(SystemBrushes.Window, Itembegrenzung)


      nur den Punkt "SystemBrushes.Window"
      ändern und schon haste andere Farbe!
      z.b.
      Brushes.Moccasin usw. einfach mal bissel testen!

      Greetz Günni
      8-)