vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 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.NET05.03.08
Mehrspaltige Listen mit der Standard ListBox (.NET)

Auch mit dem VB.NET Standard ListBox-Control lassen sich mehrspaltige Listen erstellen! Wie das geht, das verraten wir Ihnen hier.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  22.515 
www.tools4vb.deSystem:  WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Wer glaubt, mit dem Standard ListBox-Control lasse sich keine "echte" mehrspaltige Liste erstellen, ist im Irrtum! Die einzelnen Zellenwerte brauchen hierbei nämlich lediglich durch ein Tabulator-Zeichen voneinander getrennt angegeben werden.

ListBox1.Items.Add("Otter" & vbTab & "Dieter" & vbTab & "info@tools4vb.de")

Das Ganze hat allerdings einen entscheidenden Nachteil: unterschiedlich lange Spaltentexten innerhalb der einzelnen Datenzeilen werden oftmals nicht sauber untereinander dargestellt:

ListBox1.Items.Add("Otter" & vbTab & "Dieter" & vbTab & "info@tools4vb.de")
ListBox1.Items.Add("Müller-Meier" & vbTab & "Karl-Heinz" & vbTab & "info@tools4vb.de")

Das liegt aber einfach nur daran, dass die "internen" Tabulator-Positionen (TabStops) der ListBox fix eingestellt sind und bei längeren Texten einfach übergangen werden.

Was liegt also näher, die Tabulator-Positionen (TabStops) selbst zu definieren?
Mit Hilfe des Windows-API ist das nämlich gar kein Pronlem

Option Explicit
 
' benötigte API-Deklarationen
Private Declare Function SendMessage Lib "user32" _
    Alias "SendMessageA" ( _
    ByVal hwnd As Integer, _
    ByVal wMsg As Integer, _
    ByVal wParam As Integer, _
    ByRef lParam As Integer) As Integer
 
Private Const LB_SETTABSTOPS = &H192
Public Sub ListBox_SetTabStop(ByVal oList As ListBox, _
  ByVal ParamArray nTabs() As Integer)
 
  Dim nCount As Integer = nTabs.Length + 1
 
  ' TabStop-Werte zuweisen
  SendMessage(oList.Handle.ToInt32, LB_SETTABSTOPS, nCount, nTabs(0))
End Sub

Wichtig! Die Prozedur ListBox_SetTabStop erwartet die Angabe der Tabulator-Positionen in Pixel!

Beispiel für den Aufruf:

' Tabulator-Positionen festlegen
ListBox_SetTabStop ListBox1, 70, 120
 
' Einträge sauber untereinander anzeigen
With ListBox1.Items
  .Add("Otter" & vbTab & "Dieter" & vbTab & "info@tools4vb.de")
  .Add("Müller-Meier" & vbTab & "Karl-Heinz" & vbTab & "info@tools4vb.de")
End With