ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 07.09.2001

Diese Seite wurde zuletzt aktualisiert am 07.09.2001
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Umlaufende Listen

Zurück...


Anzeige

(-hg) mailto:hg_lbcbrotate@aboutvb.de

Eine endlose Liste im wirklichen Sinne gibt es sicher nicht. Aber Sie können die Markierung bzw. Auswahl in ListBoxen oder ComboBoxen endlos umlaufen lassen, sowohl abwärts als auch aufwärts.

Es gibt prinzipiell zwei Wege, auf denen Sie dies erreichen können. Der nahe liegende Weg etwa beim Aufwärtslauf wäre, den Wert des ListIndex um 1 zu erhöhen und zu prüfen, ob der neue Wert den höchstmöglichen Wert (ListCount - 1) übersteigt. Ist dies der Fall wird der ListIndex auf 0 zurückgesetzt - ein Umlauf findet statt. Natürlich ist diese Operation nur sinnvoll, wenn überhaupt Elemente in der Liste existieren (ListCount > 0).

Dim nNewListIndex As Long

With ListBox
  If .ListCount Then
    nNewListIndex = .ListIndex + 1
    If nNewListIndex > .ListCount - 1 Then
      .ListIndex = 0
    Else
      .ListIndex = nNewListIndex
    End If
  End If
End With

Umgekehrt, für die Abwärtsrichtung, würde auf ähnliche Weise der ListIndex um eins vermindert und es würde geprüft, ob die Untergrenze 0 unterschritten wird. Ist nun dies der Fall, wird der ListIndex auf den höchstmöglichen Wert gesetzt.

Viel einfacher ist das in der folgenden Funktion LBRotateIncrListIndex verwendete Verfahren. Es kommt ohne Bedingungsprüfungen aus (außer der Prüfung, ob überhaupt Elemente vorhanden sind). Auch hier wird der ListIndex zunächst erhöht. Aber es erfolgt sogleich eine Modula-Division durch die Anzahl der Elemente (ListCount). Die Modula-Division liefert nur den Rest der Division, der hier genau dann 0 ist, wenn die Erhöhung der Anzahl der Elemente und damit zugleich dem niedrigsten ListIndex entspricht. Auch der Ausnahmefall, dass noch gar kein Element ausgewählt sein könnte und der ListIndex noch -1 wäre, wird problemlos aufgefangen. Die erste Erhöhung um 1 ergäbe ja 0 - und damit bereits einen gültigen, nämlich den niedrigsten ListIndex.

Public Sub LBRotateIncrListIndex(ListBox As ListBox)
  With ListBox
    If .ListCount Then
      .ListIndex = (.ListIndex + 1) Mod .ListCount
    End If
  End With
End Sub

Die Umkehrung sieht ähnlich aus. Der Unterschied ist der, dass nach der Verminderung des ListIndex erst einmal die Anzahl der Elemente addiert wird, bevor die Modula-Division erfolgt, um das Unterschreiten der 0-Grenze zu kompensieren. Der Fall, dass noch kein Element gewählt ist (ListIndex = -1) muss hier auch separat behandelt werden - der ListIndex wird hier auf das höchstmögliche Element gesetzt.

 
Public Sub LBRotateDecrListIndex(ListBox As ListBox)
  With ListBox
  If .ListCount Then
    If .ListIndex >= 0 Then
    .ListIndex = (.ListIndex - 1 + .ListCount) Mod .ListCount
    Else
    .ListIndex = .ListCount - 1
    End If
  End If
  End With
End Sub

Das Umlaufen des ListIndex bei einer ComboBox ist völlig identisch. bei den folgenden beiden Funktionen ist lediglich der Parameter zur Übergabe des betreffenden Steuerelements entsprechend anders deklariert.
Public Sub CBRotateIncrListIndex(ComboBox As ComboBox)
With ComboBox
If .ListCount Then
.ListIndex = (.ListIndex + 1) Mod .ListCount
End If
End With
End Sub

Public Sub CBRotateDecrListIndex(ComboBox As ComboBox)
With ComboBox
If .ListIndex >= 0 Then
.ListIndex = (.ListIndex - 1 + .ListCount) Mod .ListCount
Else
.ListIndex = .ListCount - 1
End If
End With
End Sub

Modul modLBCBRotate (modLBCBRotate.bas - ca. 1,2 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche




Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer