ListBox (Listenfelder) und ComboBox (Kombinationsfelder)

 Abbildung:   Das Listenfeld-Steuerelement

Abbildung 23   Listenfeld mit einer Spalte

Listenfelder (ListBox) und Kombinationsfelder (ComboBox)bieten dem Benutzer eine Liste mit Auswahlmöglichkeiten an. Standardmäßig werden diese Auswahlmöglichkeiten in einer ein­spaltigen senkrechten Liste angezeigt. Sie können aber auch mehrspaltige Listen anlegen. Wenn die Anzahl der Elemente zu groß wird, um vollständig im Kombinations- oder Listenfeld ange­zeigt zu werden, werden dem Steuerelement automatisch Bildlaufleisten hinzugefügt. Der Be­nutzer kann anschließend in der Liste von oben nach unten (bzw. von links nach rechts) blättern und einen Eintrag aus der Liste auswählen. Abbildung 23 zeigt ein Listenfeld mit einer Spalte.

 Abbildung:   Das Kombinationsfeld-Steuerelement

Abbildung 24   Kombinationsfeld

Ein Kombinationsfeld (ComboBox) verbindet die Möglichkeiten eines Textfeldes mit denen eines Listenfeldes. Mit diesem Steuerelement kann der Benutzer eine Auswahl treffen, indem er entweder Text in das Kombinationsfeld eingibt oder ein Element aus der Liste auswählt. Abbildung 24 stellt ein Kombinationsfeld dar.

Im Gegensatz zu einigen anderen Steuerelementen, die nur einen einzigen Wert enthalten, z.B. die Caption-Eigenschaft des Bezeichnungsfeldes oder die Text-Eigenschaft des Textfeldes, enthalten Listenfelder und Kombinationsfelder mehrere Werte oder eine ganze Sammlung von Werten. Sie verfügen über besondere Methoden zum Hinzufügen, Entfernen und Abfragen von Werten zur Laufzeit.

Listenfelder und Kombinationsfelder stellen eine effektive Methode dar, um dem Benutzer zahlreiche Auswahlmöglichkeiten trotz beschränkten Raumes anzubieten.

Vergleich der Verwendung von Kombinationsfeld und Listenfeld

Ein Kombinationsfeld ist in der Regel dann sinnvoll, wenn eine Liste mit vorgeschlagenen Auswahlmöglichkeiten vorhanden ist. Ansonsten wäre ein Textfeld sinnvoller.

Ein Listenfeld oder ein Kombinationsfeld (mit Style = 2) sollten Sie verwenden, wenn Sie die Eingabe auf die Elemente beschränken möchten, die in der Liste enthalten sind.

Ein Kombinationsfeld (mit Style = 0 oder 1) enthält ein Bearbeitungsfeld, so dass Benutzer Auswahlmöglichkeiten, die nicht in der Liste enthalten sind, eingeben können.

Außerdem spart ein Kombinationsfeld Platz in einem Formular. Da die vollständige Liste erst angezeigt wird, wenn der Benutzer auf den Abwärtspfeil klickt (es sei denn, Style hat den Wert 1, d.h. die Liste wird immer angezeigt), benötigt ein Kombinationsfeld nur eine kleine Fläche, die für ein vollständiges Listenfeld nicht ausreichen würde.

Wenn man in einem einfachen Listenfeld aus Gründen der Platzersparnis nur eine Zeile der Auswahl anzeigt, besteht die Gefahr, dass der Benutzer glaubt, beim Scrollen eine Auswahl getroffen zu haben, weil er die Anzeige im Listenfeld verändert hat. Die Auswahl wird allerdings erst gültig, wenn der Benutzer sie markiert hat. Ein Kombinationsfeld (mit Style 2) ist dann günstiger.

Arten von Kombinationsfeldern

Es gibt drei Arten von Kombinationsfeldern. Jede Art kann entweder zur Entwurfs- oder zur Laufzeit festgelegt werden und verwendet Werte oder entsprechende Visual Basic-Konstanten, um die Art des Kombinationsfelds festzulegen.

Art

Style

Konstante

Dropdown-Kombinationsfeld

0

vbComboDropDown

Einfaches Kombinationsfeld

1

vbComboSimple

Dropdown-Listenfeld

2

vbComboDropDownList

 

Abbildung 25   Arten von Kombinationsfeldern

Dropdown-Kombinationsfeld

In der Standardeinstellung (Style = 0 - Dropdown-Kombinationsfeld) ist ein Kombinationsfeld ein Dropdown-Kombinationsfeld. Der Benutzer kann entweder Text direkt eingeben (wie in einem Textfeld) oder auf den Pfeil rechts neben dem Kombinationsfeld klicken, um eine Liste mit Auswahlmöglichkeiten zu öffnen. Wenn er ein Element aus der Liste auswählt, wird das Element im Textbereich oben im Kombinationsfeld eingefügt. Der Benutzer kann die Liste auch mit der Tastenkombination alt+nach-unten-taste öffnen, wenn das Kombinationsfeld den Fokus hat.

Einfaches Kombinationsfeld

Wenn Sie die Style-Eigenschaft eines Kombinationsfelds auf 1 (Einfaches Kombinationsfeld) setzen, erhalten Sie ein einfaches Kombinationsfeld, dessen Liste immer angezeigt wird. Um alle Einträge der Liste anzuzeigen, müssen Sie das Listen­feld groß genug zeichnen. Steht nicht genügend Platz zur Verfügung, so wird auto­matisch eine vertikale Bild­laufleiste eingefügt. Der Benutzer kann immer noch Text direkt eingeben oder aus der Liste auswählen. Wie in einem Dropdown-Kombinationsfeld kann der Benutzer in einem einfachen Kombi­nationsfeld eine Auswahl eingeben, die nicht in der Liste enthalten ist.

Dropdown-Listenfeld

Ein Dropdown-Listenfeld (Style = 2 - Dropdown-Liste) verhält sich ähnlich wie ein gewöhnliches Listenfeld: es zeigt eine Liste an, aus der ein Benutzer ein Element wählen muss. Im Gegensatz zu Listenfeldern wird die Liste jedoch erst angezeigt, wenn der Benutzer auf den Pfeil rechts neben dem Feld klickt. Der Hauptunterschied zwischen dem Dropdown-Listenfeld und dem Dropdown-Kombinationsfeld liegt darin, dass der Benutzer keinen Text im Feld eingeben, sondern nur ein Element aus der Liste auswählen kann. Verwenden Sie diese Art von Listenfeld, wenn nur wenig Platz zur Verfügung steht.

Methoden und Ereignisse von ListBox und Combobox

Die Ereignisse Click und Double-Click

Bei Listenfeld- oder Kombinationsfeld-Ereignissen wird in der Regel eine Befehlsschaltfläche zusammen mit dem Listen- oder Kombinationsfeld verwendet (besonders dann, wenn es Teil eines Dialogfeldes ist). Die Click-Ereignisprozedur dieser Schaltfläche sollte dann die Auswahl im Listen- oder Kombinationsfeld auswerten und eine entsprechende Operation in Ihrer Anwendung durchführen.

Das Doppelklicken auf ein Element in der Liste sollte die gleiche Wirkung haben wie das Auswählen eines Elements und das Klicken auf die Befehlsschaltfläche. Dazu muß die DblClick-Prozedur für das Listenfeld List1 oder das Kombinationsfeld Combo1 die Click-Prozedur für die Befehlsschaltfläche Command1 aufrufen:

Private Sub List1_DblClick ()   bzw   Private Sub Combo1_DblClick ()

   Command1_Click

End Sub

Sie können auch den Wert der Value-Eigenschaft für die Befehlsschaltfläche auf True setzen. Die Anweisung lautet dann:                 Command1.Value = True

Dies bietet Mausbenutzern einen Shortcut, ohne Tastaturbenutzer an der Durchführung derselben Operation zu hindern. Beachten Sie, dass es keine Tastatureingaben gibt, die dem DblClick-Ereignis entsprechen.

Hinzufügen von Elementen zu einer Liste

Mit der AddItem-Methode können Sie Elemente zu einem Listen- oder Kombinationsfeld hinzufügen:

Feld.AddItem Element, Index]

Argument

Beschreibung

Feld

Name des Listenfelds oder Kombinationsfeldes.

Element

Zeichenfolgenausdruck, der zur Liste hinzugefügt werden soll.
Wenn Element eine Textkonstante ist, müssen Sie das Argument in Anführungszeichen einschließen.

Index

Legt die Position fest, an der das neue Element in die Liste eingefügt wird.
Der Index 0 entspricht der ersten Position. Wenn Sie Index nicht angeben, wird das neue Element am Ende (oder entsprechend der Sortierreihenfolge) eingefügt.

Obwohl Listenelemente häufig in der Form_Load-Ereignisprozedur hinzugefügt werden, können Sie die AddItem-Methode jederzeit verwenden. Dadurch können Sie Elemente dynamisch (als Reaktion auf Aktionen des Benutzers) zur Liste hinzufügen.

Mit dem folgenden Code werden "Deutschland", "Indien", "Frankreich" und "USA" in ein Listenfeld mit dem Namen List1 eingefügt:

Private Sub Form_Load ()

   List1.AddItem "Deutschland"

   List1.AddItem "Indien"

   List1.AddItem "Frankreich"

   List1.AddItem "USA"

End Sub

Wenn das Formular zur Laufzeit geladen wird, wird die Liste wie in Abbildung 26 angezeigt.

Abbildung 26:   Das Listenfeld "Länder"

Mit dem folgenden Code werden die Elemente "Chardonnay", "Fumé Blanc", "Gewürztraminer" und "Zinfandel" in ein Kombinationsfeld Combo1 eingefügt, dessen Style-Eigenschaft auf 0 (vbComboDropDown) gesetzt wurde:

Private Sub Form_Load ()

   Combo1.AddItem "Chardonnay"

   Combo1.AddItem "Fumé Blanc"

   Combo1.AddItem "Gewürztraminer"

   Combo1.AddItem "Zinfandel"

End Sub

Wenn das Formular zur Laufzeit geladen wird und der Benutzer auf den Abwärtspfeil klickt, wird die in Abbildung 27 dargestellte Liste angezeigt.

Abbildung 27   Kombinationsfeld "Weinliste"

Hinzufügen eines Elements an einer bestimmten Position

Wenn ein Element an einer bestimmten Position in einer Liste eingefügt werden soll, geben Sie einen Indexwert nach dem neuen Element an. Mit der folgenden Code-Zeile wird beispielsweise der Eintrag "Japan" an der ersten Position eingefügt, wodurch die anderen Einträge nach unten verschoben werden:

List1.AddItem "Japan", 0

Abbildung 28 und29   Hinzufügen eines Elements zu einer Liste

Mit der folgenden Code-Zeile wird der Eintrag "Pinot Noir" an der ersten Position eingefügt:

Combo1.AddItem "Pinot Noir", 0

Beachten Sie, dass das erste Element in einer Liste den Index 0 und nicht den Index 1 hat.

Hinzufügen von Elementen zur Entwurfszeit

Sie können Elemente auch zur Entwurfszeit in die Liste einfügen, indem Sie die List-Eigenschaft im Eigenschaftenfenster des Listen- oder Kombinationsfeld-Steuerelements setzen. Wenn Sie die List-Eigenschaftenoption wählen und anschließend auf den Abwärtspfeil klicken, können Sie Listenelemente eingeben und dann durch Drücken der Tastenkombination STRG+EINGABE eine neue Zeile einfügen.

Sie können Elemente nur am Ende der Liste hinzufügen. Wenn die Liste alphabetisch sortiert werden soll, setzen Sie die Sorted-Eigenschaft auf True.

Sortieren einer Liste

Sie können festlegen, daß Elemente alphabetisch sortiert zu einer Liste hinzugefügt werden, indem Sie die Sorted-Eigenschaft auf True setzen und keinen Index angeben. Bei der Sortierung spielt die Groß-/Kleinschreibung keine Rolle, daher werden die Wörter "japan" und "Japan" gleich behandelt.

Wenn die Sorted-Eigenschaft den Wert True hat, kann die Verwendung der AddItem-Methode zusammen mit dem Index-Argument zu nicht vorhersehbaren und unsortierten Ergebnissen führen.

Entfernen von Elementen aus einer Liste

Sie können die RemoveItem-Methode zum Löschen von Elementen aus einem Listen- oder Kombinationsfeld verwenden. Das Argument Index von RemoveItem legt fest, welches Element entfernt werden soll:

Feld.RemoveItem Index

Die Argumente Feld und Index entsprechen den gleichnamigen Argumenten von AddItem.

Sie entfernen beispielsweise den ersten Eintrag aus einer Liste, indem Sie folgende Code-Zeile einfügen:

List1.RemoveItem 0      oder        Combo1.RemoveItem 0

Mit der Clear-Methode entfernen Sie alle Einträge in den gebundenen Versionen oder den Standardversionen von Listen- und Kombinationsfeldern:

List1.Clear        bzw.                    Combo1.Clear

Abrufen von Listeninhalten mit der Text-Eigenschaft

In der Regel ist die Text-Eigenschaft die einfachste Möglichkeit zum Abrufen des Werts des aktuell ausgewählten Elements. Die Text-Eigenschaft entspricht immer dem Listenelement, das ein Benutzer zur Laufzeit auswählt.

Der folgende Code zeigt beispielsweise Informationen über die Einwohner von Kanada in einem Textfeld Text1 an, falls ein Benutzer den Eintrag "Kanada" aus einem Listenfeld List1 auswählt:

Private Sub List1_Click ()

   If List1.Text = "Kanada" Then

      Text1.Text = "Kanada hat 24 Millionen Einwohner."

   End If

End Sub

Die Text-Eigenschaft enthält das derzeit im Listenfeld List1 ausgewählte Element. Der Code überprüft, ob "Kanada" ausgewählt wurde und zeigt gegebenenfalls die Informationen in dem Textfeld an.

Zugreifen auf Listenelemente mit der List-Eigenschaft

Die List-Eigenschaft ermöglicht den Zugriff auf alle Elemente in der Liste. Diese Eigenschaft enthält ein Datenfeld, in dem jedes Element in der Liste einem Element des Datenfelds entspricht. Jedes Element wird als Zeichenfolge dargestellt. Mit der folgenden Syntax können Sie auf ein Element in der Liste zugreifen:

Zuweisungsziel =Feld.List(Index)

Das Argument Feld ist der Name eines Listenfeldes oder Kombinationsfeldes, das Argument Index ist die Position des Listenelements. Das oberste Element hat den Index 0, das nächste Element den Index 1 usw.
Zuweisungsziel ist entweder eine Textvariable oder die Eigenschaft eines anderen Steuerelementes, die das gewählte Listenelement aufnehmen soll.

Mit den folgenden Anweisungen wird beispielsweise das dritte Element (Index = 2) einer Liste an die Text-Eigenschaft eines Textfeldes zugewiesen und damit angezeigt:

Text1.Text = List1.List(2)     bzw.      Text1.Text = Combo1.List(2)

Bestimmen des ausgewählten Elements mit der ListIndex-Eigenschaft

Wenn Sie die Position des ausgewählten Elements in einem Listen- oder Kombinationsfeld bestimmen möchten, verwenden Sie ListIndex-Eigenschaft. Diese Eigenschaft liefert den Index des momentan ausgewählten Elements und ist nur zur Laufzeit verfügbar.

Wenn Sie ein bestimmtes Element in einem Listen- oder Kombinationsfeld auswählen wollen, können Sie den ListIndex-Wert per Code festsetzen. Dabei wird auch ein Click-Ereignis für das Steuerelement ausgelöst.

Der Wert dieser Eigenschaft ist 0, falls das erste (oberste) Element ausgewählt ist, 1, wenn das nächste Element ausgewählt ist usw. ListIndex hat den Wert -1, wenn kein Element ausgewählt ist. Ein ausgewähltes Element wird farblich im Listenfeld hervorgehoben.

Ermitteln der Elementanzahl mit der ListCount-Eigenschaft

Mit der ListCount-Eigenschaft können Sie die Anzahl der Elemente in einem Listenfeld ermitteln. Die folgende Anweisung ermittelt z.B. mit der ListCount-Eigenschaft die Anzahl der Einträge in einem Listenfeld:

Text1.Text = "Die Liste enthält " & List1.ListCount & " Einträge."

Anmerkung   Mit der NewIndex-Eigenschaft können Sie den Index des zuletzt zur Liste hinzugefügten Elements abrufen. Dies kann hilfreich sein, wenn Sie ein Element in eine sortierte Liste einfügen.

Erstellen von Listenfeldern mit mehreren Spalten

Mit der Columns-Eigenschaft können Sie die Anzahl der Spalten in einem Listenfeld festlegen. Diese Eigenschaft kann die folgenden Werte haben:

Wert

Beschreibung

0

Listenfeld mit einer Spalte mit vertikalem Bildlauf.

1

Listenfeld mit einer Spalte mit horizontalem Bildlauf.

>1

Listenfeld mit mehreren Spalten mit horizontalem Bildlauf.

Visual Basic bricht Listenelemente in die nächste Zeile um und fügt gegebenenfalls eine horizontale Bildlaufleiste zur Liste hinzu. Wenn die Liste in eine einzige Spalte passt, wird keine Bildlaufleiste hinzugefügt. Der Umbruch des Textes in die nächste Spalte wird gegebenenfalls auch automatisch durchgeführt. Beachten Sie, dass der Text abgeschnitten wird, wenn ein Listenfeldeintrag breiter als die Spalte ist.

Erstellen von Listenfeldern mit mehreren Auswahlmöglichkeiten

Sie können Benutzern die Auswahl von mehreren Elementen aus einer Liste ermöglichen. Verwenden Sie dazu die MultiSelect-Eigenschaft, die die folgenden Werte haben kann:

Wert

Art der Auswahl

Beschreibung

0

Keine

Standardlistenfeld

1

Einfache Mehrfachauswahl

Durch einmaliges Klicken oder Drücken der LEERTASTE werden weitere Elemente in der Liste ausgewählt, oder die Auswahl der Elemente wird aufgehoben.

2

Erweiterte Mehrfachauswahl

Die Tastenkombinationen UMSCHALT+ Klicken oder UMSCHALT+ eine Pfeiltaste erweitern die Auswahl, so daß alle Elemente zwischen der aktuellen und der vorherigen Auswahl enthalten sind. Mit STRG+ Klicken wird ein Element in der Liste ausgewählt, oder die Auswahl wird aufgehoben.

Bestimmen der ausgewählten Elemente mit der Selected-Eigenschaft

In einem Listenfeld mit Mehrfachauswahl erhält man den Auswahlzustand eines Listenelements mit Hilfe der Selected-Eigenschaft. Diese Eigenschaft besteht aus einem Datenfeld mit booleschen Werten, das genauso viele Elemente enthält wie die List-Eigenschaft. Für jedes Element des Datenfeldes List1.List(n) existiert ein entsprechendes Element List1.Selected(n), das den Wert True hat, wenn es vom Benutzer gewählt wurde.Andernfalls hat es den Wert False. Diese Eigenschaft steht zur Entwurfszeit nicht zur Verfügung. Sie können damit schnell überprüfen, welche Elemente in der Liste ausgewählt sind.

In diesem Beispiel werden ausgewählte Elemente von List1 einem anderen Listenfeld List2 hinzugefügt.

   For I = 0 To List1.ListCount - 1

      If List1.Selected(I) Then

        List2.AddItem List1.List(I)

      End If

   Next I

Mit der Selected-Eigenschaft können Sie auch per Code Elemente in einer Liste aus- bzw. abwählen.

Datengebundene Funktionsmerkmale
Visual Basic beinhaltet sowohl eine Standardversion als auch eine datengebundene Version der Listenfeld- und Kombinationsfeld-Steuerelemente. Während beide Versionen dieser Steuerelemente das Anzeigen, Bearbeiten und Aktualisieren von Informationen aus den meisten Standardtypen von Datenbanken ermöglichen, stellt das daten­gebundene Listenfeld erweiterte Funktionen für den Zugriff auf Daten zur Verfügung. Das datengebundene Listen­feld unterstützt außerdem andere Eigenschaften und Methoden als das standardmäßige Listenfeld-Steuerelement.