Die Community zu .NET und Classic VB.
Menü

FAQ 0086: Wie kann ich mehrere Spalten in einer Listbox/Combobox anzeigen?

 von 

Frage 

Wie kann ich mehrere Spalten in einer Listbox/Combobox anzeigen?

Listbox/Combobox  

Das Aussehen von Spalten kann man simulieren, indem man die Schriftart der Listbox/Combobox auf eine Schriftart mit fester Laufweite (z.B. Courier New) setzt.
Man muß dann die Werte der einzelnen Spalten mit Leerzeichen auffüllen, bis die maximale Spaltenbreite erreicht ist.

Möchte man nicht auf eine andere Schriftart umsteigen, ist etwas Rechnerei gefragt.
Auf ein Beispiel verzichte ich, weil es unübersichtlich und sehr aufwendig ist.
Wer sich daran versuchen möchte, dem sei die Funktion TextWidth als Ansatz ans Herz gelegt.

nur Listbox  

Folgender Code funktioniert nur bei einer Listbox, eine Combobox kennt die entsprechende Nachricht nicht:

'   Deklaration der API-Funktion
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

'   Konstante für die Nachrichten
Private Const LB_SETTABSTOPS As Long = &H192&
Public Sub SetListTabStop( _
                ByRef objList As VB.ListBox, _
                ParamArray TabStops() As Variant)
    '   Variablen
    Dim lngCount As Long
    Dim lngTabStops() As Long
    
    '   Bereits vorhandene TabStops löschen
    Call SendMessage(objList.hwnd, LB_SETTABSTOPS, 0&, ByVal 0&)

    '   Sind TabStops festgelegt worden?
    If Not (IsMissing(TabStops)) Then
        '   Array für die TabStops anlegen
        ReDim lngTabStops(LBound(TabStops) To UBound(TabStops))

        '   TabStops kopieren
        For lngCount = LBound(TabStops) To UBound(TabStops)
            lngTabStops(lngCount) = TabStops(lngCount)
        Next lngCount
    
        '   Anzahl der TabStops ermitteln
        lngCount = UBound(lngTabStops) - LBound(lngTabStops) + 1

        '   Dann neue TabStops einfügen

        Call SendMessage(objList.hwnd, LB_SETTABSTOPS, lngCount, _
                                                        lngTabStops(0))
    End If
    
    '   Zuletzt Liste neu darstellen
    objList.Refresh
End Sub

Listing 1: TabStops in einer Listbox setzen oder löschen

'   Tabstops bei 70 und 120 Pixeln setzen
Call SetListTabStop(List1, 70, 120)

Listing 2: Beispiel zum Setzen von TabStops

'   Tabstops löschen
Call SetListTabStop(List1)

Listing 3: Beispiel zum Löschen von TabStops

Andere Steuerelemente  

Man kann aber auch andere Steuerelemente benutzen. In Frage kommen das ListView-Control oder eins der zahlreichen Grid-Controls (MSFlexGrid, MSHFlexGrid etc).

Ihre Meinung  

Falls Sie Fragen zu dieser FAQ haben, Ihre Erfahrung mit anderen Nutzern austauschen möchten oder auf eine Ergänzung hinweisen möchten, dann teilen Sie uns diese bitte in einem der unten vorhandenen Themen oder über einen neuen Beitrag mit. Hierzu können sie einfach einen Beitrag in einem zum Thema passenden Forum anlegen, welcher automatisch mit dieser Seite verknüpft wird.