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

https://www.vbarchiv.net
Rubrik: Controls · ListBox   |   VB-Versionen: VB4, VB5, VB621.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 OtterBewertung:  Views:  25.891 
www.tools4vb.deSystem:  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"



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-2024 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.