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 einspaltigen 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 angezeigt zu werden, werden dem Steuerelement automatisch Bildlaufleisten hinzugefügt. Der Benutzer 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.
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.
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 |
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.
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 Listenfeld groß genug zeichnen. Steht nicht genügend Platz zur Verfügung, so wird automatisch eine vertikale Bildlaufleiste 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 Kombinationsfeld eine Auswahl eingeben, die nicht in der Liste enthalten ist.
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.
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.
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. |
Index |
Legt die Position
fest, an der das neue Element in die Liste eingefügt wird. |
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" |
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.
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.
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.
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
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.
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)
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.
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.
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.
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. |
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.