vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Brandneu! sevEingabe v3.0 - Das Eingabecontrol der Superlative!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
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:     [ Jetzt bewerten ]Views:  29.542 
www.tools4vb.deSystem:  WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 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.
 

Dieser Tipp wurde bereits 29.542 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


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.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle 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.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel