vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Controls · ListBox & ComboBox   |   VB-Versionen: VB.NET03.10.07
Mehrspaltige ListBox (VB.NET)

Durch das Selbst-Zeichnen der ListBox-Einträge lässt sich eine mehrspaltige ListBox-Anzeige sehr leicht realisieren.

Autor:   Dieter OtterBewertung:  Views:  26.816 
www.tools4vb.deSystem:  WinNT, Win2k, WinXP, Vista, Win7, Win8, Win10 Beispielprojekt auf CD 

Anhand eines kleinen Beispiels möchten wir Ihnen zeigen, wie sich die Anzeige von Daten im Standard ListBox-Control von VB.NET mehrspaltig realisieren lässt. Die Daten selbst verwalten wir in einer kleinen Klasse mit folgenden Membern: ID, KundenNr, Name und Telefon.

Public Class MyListData
  Private m_ID As Integer
  Private m_KundenNr As String
  Private m_Name As String
  Private m_Telefon As String
 
  ' Direktes Initialisieren mit Daten ermöglichen
  Public Sub New(ByVal ID As Integer, ByVal KundenNr As String, _
    ByVal Name As String, ByVal Telefon As String)
 
    m_ID = ID
    m_KundenNr = KundenNr
    m_Name = Name
    m_Telefon = Telefon
  End Sub
 
  ' Eigenschaften
  Public Property ID() As Integer
    Get
      Return m_ID
    End Get
    Set(ByVal value As Integer)
      m_ID = ID
    End Set
  End Property
 
  Public Property KundenNr() As String
    Get
      Return m_KundenNr
    End Get
    Set(ByVal value As String)
      m_KundenNr = value
    End Set
  End Property
 
  Public Property Name() As String
    Get
      Return m_Name
    End Get
    Set(ByVal value As String)
      m_Name = value
    End Set
  End Property
 
  Public Property Telefon() As String
    Get
      Return m_Telefon
    End Get
    Set(ByVal value As String)
      m_Telefon = value
    End Set
  End Property
 
  Public Overrides Function ToString() As String
    Return m_Name
  End Function
End Class

Nun ziehen wir ein ListBox-Control auf die Form und füllen die Liste mit ein paar Testdaten:

Private Sub Form1_Load(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles MyBase.Load
 
  ' ListBox mit Daten fülllen
  With ListBox1.Items
    .Add(New MyListData(1, "00001", "Otter Dieter", "(09708) 706247"))
    .Add(New MyListData(2, "00002", "Max Mustermann", "(00000) 99999"))
    .Add(New MyListData(3, "00003", "Hans Meier", ""))
  End With
 
  ' OwnerDraw setzen (wir zeichnen den Inhalt selbst!)
  ListBox1.DrawMode = DrawMode.OwnerDrawFixed
End Sub

Um die ListBox-Einträge mehrspaltig anzeigen zu können, müssen wir die DrawMode-Eigenschaft auf den Wert "DrawMode.OwnerDrawFixed" festlegen. Das bewirkt, dass bei jedem zu zeichnenden ListBox-Eintrag das DrawItem-Ereignis ausgelöst wird. Und das ist dann genau die richtige Stelle für unsere "Zeichenroutine".

Private Sub ListBox1_DrawItem(ByVal sender As Object, _
  ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ListBox1.DrawItem
 
  ' ListBox-Eintrag selbst zeichnen
  ' Beispiel: 3 Spalten (KundenNr, Name und Telefon)
 
  If e.Index < 0 Then Exit Sub
 
  ' Daten, die angezeigt werden sollen
  Dim myData As MyListData = DirectCast(ListBox1.Items(e.Index), MyListData)
 
  ' Schriftart festlegen
  Dim oFont As Font = ListBox1.Font
 
  ' Brush-Objekt mit Farbwert für die Anzeige der Zeile
  Dim oBrush As New SolidBrush(e.ForeColor)
 
  ' Hintergrund des aktuellen Eintrags zeichnen
  e.DrawBackground()
 
  ' jetzt die einzelnen Texte in 3 Spalten anzeigen
  With e.Graphics
    ' KundenNr
    .DrawString(myData.KundenNr, oFont, oBrush, e.Bounds.X, e.Bounds.Y)
 
    ' Name (im vorgegebenen Rechteck zeichnen, damit letzte Spalte 
    ' nicht "überschrieben" wird)
    .DrawString(myData.Name, oFont, oBrush, New RectangleF( _
      e.Bounds.X + 50, e.Bounds.Y, e.Bounds.Right - e.Bounds.X - 132, e.Bounds.Height))
 
    ' Telefon-Nr.
    .DrawString(myData.Telefon, oFont, oBrush, e.Bounds.X + e.Bounds.Width - 80, e.Bounds.Y)
  End With
 
  ' Objekte freigeben
  oBrush.Dispose()
End Sub

Starten Sie das Projekt - et voilà: Die Daten werden 3-spaltig in der ListBox angezeigt.
 



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2021 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.