Rubrik: Controls · ListBox | VB-Versionen: VB4, VB5, VB6 | 21.10.04 |
Mehrspaltige Listen mit der Standard ListBox Auch mit dem Standard ListBox-Control lassen sich mehrspaltige Listen erstellen! Wie das geht, das verraten wir Ihnen hier. | ||
Autor: Dieter Otter | Bewertung: | Views: 25.891 |
www.tools4vb.de | System: Win9x, 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.
List1.AddItem "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:
List1.AddItem "Otter" & vbTab & "Dieter" & vbTab & "info@tools4vb.de" List1.AddItem "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 Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ lParam As Any) As Long Private Const LB_SETTABSTOPS = &H192
Public Sub ListBox_SetTabStop(ByVal oList As Object, _ ParamArray vTabValue()) Dim nCount As Long Dim nTab() As Long Dim i As Long ' TabStop-Werte in ein 1-basierendes Array speichern nCount = UBound(vTabValue) + 1 ReDim nTab(1 To nCount) For i = 1 To nCount nTab(i) = vTabValue(i - 1) Next i ' TabStop-Werte zuweisen SendMessage oList.hwnd, LB_SETTABSTOPS, nCount, nTab(1) End Sub
Achtung! Die Prozedur ListBox_SetTabStop erwartet die Angabe der Tabulator-Positionen in Pixel!
Beispiel für den Aufruf:
' Tabulator-Positionen festlegen ListBox_SetTabStop List1, 70, 120 ' Einträge sauber untereinander anzeigen List1.AddItem "Otter" & vbTab & "Dieter" & vbTab & "info@tools4vb.de" List1.AddItem "Müller-Meier" & vbTab & "Karl-Heinz" & vbTab & "info@tools4vb.de"