Rubrik: Controls · ListBox | VB-Versionen: VB5, VB6 | 31.05.05 |
Mehrere ListBoxen parallel scrollen Dieser Tipp zeigt, wie sich mehrere ListBox-Controls parallel zueinandern scrollen lassen. | ||
Autor: Rolf Wahlbrinck | Bewertung: | Views: 14.274 |
ohne Homepage | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
Befinden sich zwei oder noch mehr Listboxen mit einer gleichen Anzahl Elemente auf einem Formular, und soll beim Auswählen eines Elementes der Liste 1 parallel auch das entsprechende Element der Liste 2 selektiert werden, so hilft Ihnen dieser Tipp weiter.
Erstellen Sie ein neues Projekt und platzieren auf die Form drei ListBox-Controls als Control-Array (List1(0), List(1) und List1(2)). Fügen Sie nachfolgenden Code zunächst in ein Modul ein:
Option Explicit ' Benötigte API-Deklarationen Private Declare Function SendMessage Lib "user32" _ Alias "SendMessageA" ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal Param As Long, _ lParam As Any) As Long Private Const LB_SETCURSEL = &H186 Private Const LB_SETTOPINDEX = &H197
Public Sub ListenBeiClickEreignisAngleichen(ListB As Object, Index As Integer) Dim LIndex As Long Dim LB As ListBox ' ListIndex suchen For Each LB In ListB If LB.Index = Index Then LIndex = LB.ListIndex Exit For End If Next LB ' ListIndex setzen For Each LB In ListB If LB.Index <> Index Then SendMessage LB.hwnd, LB_SETCURSEL, LIndex, 0& End If Next LB End Sub
Public Sub ListenBeiScrollEreignisAngleichen(ListB As Object, Index As Integer) Dim LIndex As Long Dim LB As ListBox ' TopIndex suchen For Each LB In ListB If LB.Index = Index Then LIndex = LB.TopIndex Exit For End If Next LB ' TopIndex setzen For Each LB In ListB If LB.Index <> Index Then SendMessage LB.hwnd, LB_SETTOPINDEX, LIndex, 0& End If Next LB End Sub
Fügen Sie jetzt noch nachfolgenden Code in den Codeteil der Form1 ein:
Private Sub Form_Load() Dim i As Long ' ListBoxen füllen For i = 1 To 100 List1(0).AddItem "Eintrag " & CStr(i) List1(1).AddItem "Eintrag " & CStr(i) List1(2).AddItem "Eintrag " & CStr(i) Next i End Sub
Beim Auswählen eines Eintrags oder beim Scrollen über die Scrollbar muss die Ansicht der beiden anderen ListBoxen ebenfalls aktualisiert werden:
Private Sub List1_Click(Index As Integer) ListenBeiClickEreignisAngleichen List1, Index End Sub
Private Sub List1_Scroll(Index As Integer) ListenBeiScrollEreignisAngleichen List1, Index End Sub