VB-Homepage Tipp 392

"ferngesteuerte" Navigierung in Listboxen

Klingt sehr vielversprechend und ich denke schon, daß man es zu Weilen gebrauchen kann, diesen Tipp. Aber nun etwas mehr Info, damit Sie besser verstehen können, was ich mit der Überschrift meine.

Nehmen wir mal an, Sie nutzen eine Listbox, in die immer neue Einträge aufgenommen werden. Dann wird der neueste Eintrag, soweit man
AddItem nutzt, immer hinten dran gehängt und irgendwann ist der
neuste Eintrag nicht mehr zu sehen und das ist doch schlecht.

Nun kann man mit einigen Angaben, die Anzahl der Einträge ermitteln und diesen
auswählen  ....   aber egal was Sie auch versuchen, es sieht nicht sauber aus,
weil alles rumzuckelt.

Und hier ist der Ansatzpunkt für diesen Tipp.
Sie können über den Aufruf einer einzigen Programmzeile, an das Ende und an den Anfang springen. Sie können eine Seite oder auch nur eine Zeile nach unten oder nach oben springen und das alles ruckelfrei und auch ohne negative Einflüsse auf
eventuelle Markierungen.

1. Benötigen Sie nicht mehr als eine Form und eine Listbox (List1)

2. Allgemein/Deklarationen
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( _
ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Any) _
As Long

Const WM_VSCROLL = &H115

Const SB_LINEUP = 0
Const SB_LINEDOWN = 1
Const SB_PAGEUP = 2
Const SB_PAGEDOWN = 3
Const SB_TOP = 6
Const SB_BOTTOM = 7

3. Basteln Sie sich zwei Commandbutton auf Ihre Form,

3.1. Command1 = Füllt die Listbox immer wieder mit neuen Datensätzen

Command1_Click
If index = 0 Then
   For i = List1.ListCount To List1.ListCount + 14
      List1.AddItem "neuer eintrag " & i
   Next i
End If

3.2. Command2 = wird die "Fernsteuerung übernehmen"
Haben Sie Command2 erstellt, so fügen Sie noch weitere 5 Kopien hinzu,
so das wir Command2(0) bis Command2(5) haben.

Öffnen Sie die Methode Command2_Click (Index As Integer) und fügen Sie folgenden Code ein.

Command2_Click(Index As Integer)
If index = 0 Then
   SendMessage List1.hwnd, WM_VSCROLL, SB_BOTTOM, 0&
ElseIf index = 1 Then
   SendMessage List1.hwnd, WM_VSCROLL, SB_TOP, 0&
ElseIf index = 2 Then
   SendMessage List1.hwnd, WM_VSCROLL, SB_PAGEUP, 0&
ElseIf index = 3 Then
   SendMessage List1.hwnd, WM_VSCROLL, SB_PAGEDOWN, 0&
ElseIf index = 4 Then
   SendMessage List1.hwnd, WM_VSCROLL, SB_LINEUP, 0&
ElseIf index = 5 Then
   SendMessage List1.hwnd, WM_VSCROLL, SB_LINEDOWN, 0&
End If

4. Noch die Beschriftung zum Programmstart

Form_Load
Command1.Caption = "neue Einträge hinzufügen"
Command2(0).Caption = "Ende"
Command2(1).Caption = "Anfang"
Command2(2).Caption = "PageUp"
Command2(3).Caption = "PageDown"
Command2(4).Caption = "LineUp"
Command2(5).Caption = "LineDown"

5. Wenn Sie jetzt Ihr Programm starten, über den Command1 Button Ihre Listbox füllen, können Sie allein mit den Command2 Buttons in Ihrer Listbox navigieren.

Tipp-Download

Quelle :

Zurück zur Übersichtsseite