Listenfeld
Ein Listenfeld (englisch listbox, auch Auswahlliste) ist ein Steuerelement (control, component) einer grafischen Benutzeroberfläche (GUI). Es dient zur Darstellung von durch den Benutzer auswählbaren Einträgen in Listenform. Bei den Einträgen handelt sich in der Regel um Daten textueller Natur, aber auch die Darstellung von Piktogrammen oder Kombinationen aus Text und Bild sind möglich.
Arten von Listenfeldern
Es wird zwischen verschiedenen Arten von Listenfeldern unterschieden:
- Das normale Listenfeld ist mehrzeilig. Aus ergonomischen Gründen wird empfohlen, es mindestens vierzeilig zu gestalten. Da sich in der Liste meist mehr Einträge befinden, als das Feld Zeilen besitzt, dient eine vertikale Bildlaufleiste (scrollbar) zum Blättern (scrollen) innerhalb der Liste.
- Neben dem permanent sichtbaren mehrzeiligen Listenfeld, existiert noch die platzsparende einzeilige Drop-Down Listbox (Dropdown-Listenfeld, Klappliste). Bei Ihr zeigt sich die vollständige Liste erst beim Drücken der zugehörigen Schaltfläche in Form eines Menüs (Popup-Menü, Kontextmenü), das die Auswahl eines Eintrages gestattet.
- Die Kombination aus Listenfeld und einem Textfeld (Textfield) zur direkten Ein- und Ausgabe bezeichnet man als Combobox (Kombinationsfeld).
- Erweiterte Listenfelder mit Symbolen, Text und/oder mehreren Spalten, wie sie in Dateimanagern häufig zu finden sind, werden auch Listview genannt.
Welche Einträge – als Vorschläge zur Auswahl durch den Anwender – zu welchem Zeitpunkt im Listenfeld angezeigt werden, hängt dabei von der Programmierung der jeweiligen Anwendung ab. Von den Details der Implementierung des Listenfeldes in einem Computerprogramm hängt es auch ab, ob nur ein oder mehrere Einträge selektiert werden können. Bei einzeiligen Listenfeldern kann in der Regel nur ein Eintrag selektiert werden.
Beispiele
Java
In der Programmiersprache Java gibt es unterschiedliche Listenfelder
AWT
- Das mehrzeilige Listenfeld heißt java.awt.List
- Das einzeilige Drop-Down-Listenfeld heißt java.awt.Choice
Swing
- Das mehrzeilige Listenfeld heißt javax.swing.JList
- Das einzeilige Drop-Down-Listenfeld heißt javax.swing.JComboBox. Da es sich hierbei um ein Kombinationsfeld handelt, muss definiert werden, ob es nur zur Auswahl dienen soll oder auch Eingaben über das integrierte Textfeld annehmen soll (
setEditable(true)
).
HTML
In der Auszeichnungssprache HTML gibt es nur das Element <select> für Auswahllisten
- Das einzeilige Listenfeld erzeugt man mit
<select size=1>
- Das mehrzeilige Listenfeld erzeugt man mit
<select size=2>
(oder mehr)
Excel Visual Basic
Das Beispiel überträgt die Daten aus einem Excel-Tabellenblatt in die Listbox. Es beschränkt sich auf drei Spalten, kann aber erweitert werden.
- Lade eine Excel-Datei (beispielsweise Adressen) oder erstelle eine solche Datei. Speichere die Datei unter dem Namen „mappe.xls“.
- Erstelle eine Userform mit der Bezeichnung „Userform1“ und ein Listenfeld mit der Bezeichnung „Listbox1“.
- Kopiere den folgenden Userform Code:
Private Sub UserForm_Initialize()
'Listbox füllen
ListBox1.ColumnCount = 3
ListBox1.BoundColumn = 0
ListBox1.RowSource = "mappe.xls!A1:C3"
End Sub
C#
Das folgende ein wenig umfangreichere Beispiel in der Programmiersprache C# zeigt die Implementierung von 2 Listenfeldern. In das 1. Listenfeld werden Quadratzahlen eingetragen, in das 2. Listenfeld Dreieckszahlen. Das Auswahlereignis der Listenfelder wird jeweils mit einer Ereignisbehandlungsroutine verknüpft (siehe Ereignis). Wenn sich die Auswahl in den Listenfeldern ändert, wird die ausgewählte Quadratzahl mit der ausgewählten Dreieckszahl verglichen und eine entsprechende Meldung in einem Textfeld ausgegeben.[1]
// Konstruktor des Hauptfensters.
public MainForm() : base()
{
InitializeListBoxesAndTextBox();
}
// Startet die Anwendung und erzeugt das Hauptfenster durch Aufruf des Konstruktors.
public static void Main()
{
Application.Run(new Main());
}
private System.Windows.Forms.ListBox squareNumbersListBox;
private System.Windows.Forms.ListBox triangularNumbersListBox;
private System.Windows.Forms.TextBox comparisonTextBox;
// Initialisiert die Listenfelder und das Textfeld.
private void InitializeListBoxesAndTextBox()
{
// Erzeugt das Listenfeld für die Quadratzahlen.
squareNumbersListBox = new ListBox(); // Aufruf des Standard Konstruktors für das Listenfeld
squareNumbersListBox.Location = new System.Drawing.Point(50, 50); // Setzt die Position des Listenfelds
squareNumbersListBox.Size = new System.Drawing.Size(200, 50); // Setzt die Größe des Listenfelds
squareNumbersListBox.MultiColumn = false; // Legt fest, dass das Listenfeld nur eine Spalte haben kann.
squareNumbersListBox.SelectionMode = SelectionMode.One; // Legt fest, dass nur ein Element des Listenfelds gleichzeitig ausgewählt werden kann.
Controls.Add(squareNumbersListBox); // Fügt das Listenfeld dem Hauptfenster hinzu.
// Erzeugt das Listenfeld für die Dreieckszahlen.
triangularNumbersListBox = new ListBox();
triangularNumbersListBox.Location = new System.Drawing.Point(50, 100);
triangularNumbersListBox.Size = new System.Drawing.Size(200, 50);
triangularNumbersListBox.MultiColumn = false;
triangularNumbersListBox.SelectionMode = SelectionMode.One;
Controls.Add(triangularNumbersListBox);
// Erzeugt das Textfeld für die Ausgabemeldung.
comparisonTextBox = new TextBox();
comparisonTextBox.Location = new System.Drawing.Point(50, 150);
comparisonTextBox.Size = new System.Drawing.Size(200, 50);
comparisonTextBox.Multiline = false; // Legt fest, dass das Textfeld nur eine Zeile haben kann und keine Zeilenumbrüche ermöglicht.
Controls.Add(comparisonTextBox);
// Verhindert, dass Änderungen des 1. Listenfelds angezeigt werden.
squareNumbersListBox.BeginUpdate();
// Diese for-Schleife trägt die Quadratzahlen -10², -9², ..., 9², 10² in das 1. Listenfeld ein.
for (int i = -10; i <= 10; i++)
{
int squareNumber = i * i;
squareNumbersListBox.Items.Add(squareNumber.ToString());
}
// Ermöglicht, dass Änderungen und die hinzugefügten Quadratzahlen des 1. Listenfelds angezeigt werden.
squareNumbersListBox.EndUpdate();
triangularNumbersListBox.BeginUpdate();
// Diese for-Schleife trägt die Dreieckszahlen -10 * -9 / 2, -9 * -8 / 2, ..., 9 * 10 / 2, 10 * 11 / 2 in das 2. Listenfeld ein.
for (int i = -10; i <= 10; i++)
{
int triangularNumber = (i * (i + 1)) / 2;
triangularNumbersListBox.Items.Add(triangularNumber.ToString());
}
triangularNumbersListBox.EndUpdate();
// Verknüpft die Ereignisbehandlungsmethoden jeweils mit dem Auswahlereignis SelectedIndexChanged der Listenfelder.
squareNumbersListBox.SelectedIndexChanged += squareNumbersListBox_SelectedIndexChanged;
triangularNumbersListBox.SelectedIndexChanged += triangularNumbersListBox_SelectedIndexChanged;
}
// Diese Methode wird aufgerufen, wenn der Benutzer die Auswahl des Listenfelds mit den Quadratzahlen ändert.
private void squareNumbersListBox_SelectedIndexChanged(object sender, System.EventArgs e)
{
setComparisonMessage(); // Methodenaufruf
}
// Diese Methode wird aufgerufen, wenn der Benutzer die Auswahl des Listenfelds mit den Dreieckszahlen ändert.
private void triangularNumbersListBox_SelectedIndexChanged(object sender, System.EventArgs e)
{
setComparisonMessage(); // Methodenaufruf
}
// Vergleicht, ob die Quadratzahl kleiner, größer oder gleich der Dreieckszahl ist und gibt eine entsprechende Meldung im Textfeld aus.
private void setComparisonMessage()
{
// Prüft, ob in beiden Listenfeldern jeweils ein Element ausgewählt ist.
if (squareNumbersListBox.SelectedIndex != -1 && triangularNumbersListBox.SelectedIndex != -1)
{
int squareNumber = int.Parse(squareNumbersListBox.SelectedItem.ToString()); // Typumwandlung
int triangularNumber = int.Parse(triangularNumbersListBox.SelectedItem.ToString()); // Typumwandlung
if (squareNumber < triangularNumber)
{
comparisonTextBox.Text = "Die Quadratzahl " + squareNumber + " ist kleiner als die Dreieckszahl " + triangularNumber + ".";
}
if (squareNumber > triangularNumber)
{
comparisonTextBox.Text = "Die Quadratzahl " + squareNumber + " ist größer als die Dreieckszahl " + triangularNumber + ".";
}
if (squareNumber == triangularNumber)
{
comparisonTextBox.Text = "Die Quadratzahl " + squareNumber + " ist gleich der Dreieckszahl " + triangularNumber + ".";
}
}
}
Siehe auch
Einzelnachweise
- Microsoft Docs: ListBox Class