Dieses Kapitel widmet sich einigen fortgeschrittenen Themen: dem Umgang mit Ereignissen, Feldern und Strukturen sowie der Modularisierung von Programmen.
4 Erweiterte Grundlagen
Bei der Bedienung von Windows-Programmen finden immer wieder Ereignisse statt, deren Erkennung, Behandlung und Steuerung Thema dieses Kapitels ist. Hinzu kommen wichtige Programmierelemente wie Felder, Strukturen, Prozeduren und Funktionen.
4.1 Steuerelemente aktivieren 

Benutzerführung
Neben so offensichtlichen Eigenschaften und Ereignissen wie Text oder Click gibt es weitere Eigenschaften, Methoden und Ereignisse von Steuerelementen, die den Ablauf und die Benutzerführung innerhalb eines Windows-Programms verbessern können. Einige von ihnen sollen im Folgenden vorgestellt werden.
4.1.1 Ereignis Enter 

Das Ereignis Enter eines Steuerelements tritt immer dann auf, wenn der Benutzer das betreffende Steuerelement angewählt, also zum aktuellen Steuerelement gemacht hat.
Enter
Steuerelemente können per Maus oder per Tastatur angewählt werden. Wird z. B. ein Kontrollkästchen per Maus angewählt, so ändert sich auch sein Zustand (Häkchen an/aus). Wird es jedoch per Tastatur angewählt, ändert sich der Zustand nicht. In beiden Fällen wurde es aber zum aktuellen Steuerelement, es ist also das Ereignis Enter eingetreten.
Im nachfolgenden Programm im Projekt EreignisEnter soll mithilfe des Ereignisses Enter zu einzelnen Elementen eines Eingabeformulars jeweils eine passende Hilfestellung erscheinen, siehe Abbildung 4.1.
Abbildung 4.1 Ereignis Enter
Der Programmcode:
Public Class Form1 Private Sub Form1_Load(...) Handles MyBase.Load lstPaketdienst.Items.Add("DHL") lstPaketdienst.Items.Add("Hermes") lstPaketdienst.Items.Add("UPS") End Sub Private Sub Form1_Activated(... ) Handles MyBase.Activated lblHilfe.Text = "" End Sub Private Sub txtName_Enter(... ) Handles txtName.Enter lblHilfe.Text = "Bitte geben Sie Nachname, Vorname ein" End Sub Private Sub chkKunde_Enter(... ) Handles chkKunde.Enter lblHilfe.Text = "Kreuzen Sie hier an," & " ob Sie bereits Kunde sind" End Sub Private Sub optKreditkarte_Enter(... ) Handles optKreditkarte.Enter, optLastschrift.Enter, optÜberweisung.Enter lblHilfe.Text = "Wählen Sie Ihre Zahlungsform aus" End Sub Private Sub lstPaketdienst_Enter(... ) Handles lstPaketdienst.Enter lblHilfe.Text = "Wählen Sie Ihren" & " bevorzugten Paketdienst aus" End Sub End Class
Listing 4.1 Projekt »EreignisEnter«
Zur Erläuterung:
- Das Listenfeld wird wie gewohnt beim Ereignis Form1_Load gefüllt.
Activated
- Das Ereignis Form1_Activated tritt kurze Zeit darauf ein, wenn das Formular zur Benutzung bereit steht. In diesem Moment wird das Label mit dem Hilfetext geleert. Dadurch wird gewährleistet, dass es leer ist, unabhängig davon, welches Steuerelement zu Beginn das aktuelle ist.
- Zum Ereignis Enter der einzelnen Steuerelemente (Textfeld, Kontrollkästchen, Optionsschaltflächen und Listenfeld) gibt es jeweils eine eigene Ereignisprozedur. Sie sorgt dafür, dass der zugehörige Hilfetext angezeigt wird. Der Hilfetext zu den drei Optionsschaltflächen wird in einer gemeinsamen Ereignisprozedur erzeugt.
Ansicht Ereignisse
Die bisher genutzten Ereignisprozeduren wurden einfach per Doppelklick auf das Steuerelement bzw. das Formular erzeugt. In diesem Abschnitt wurde eine weitere Möglichkeit dazu genutzt: Im Eigenschaftenfenster können Sie auf die Ansicht Ereignisse wechseln, indem Sie das Symbol mit dem Blitz anklicken.
Abbildung 4.2 Liste der Ereignisse
Doppelklick
Es erscheint dann eine Liste aller Ereignisse, die zu dem aktuellen Steuerelement eintreten können. Unterhalb der Liste steht eine Erläuterung zu dem jeweiligen Ereignis (siehe Abbildung 4.2). Falls Sie einen Doppelklick auf einem Ereignis ausführen, dann wird der Rahmen der zugehörigen Ereignisprozedur erzeugt (siehe Abbildung 4.3).
Abbildung 4.3 Rahmen der Ereignisprozedur
4.1.2 Eigenschaften Enabled und Visible 

Fast jedes Steuerelement verfügt über die Eigenschaften Enabled (= anwählbar, benutzbar) und Visible (= sichtbar). Weisen Sie der Eigenschaft Enabled eines Steuerelements den Wert False zu, so wird es vorübergehend gesperrt, wenn seine Benutzung nicht sinnvoll oder riskant ist.
Benutzerführung
Ein gesperrtes Steuerelement ist nur noch abgeblendet sichtbar. Dadurch erreichen Sie eine bessere Benutzerführung, da der Benutzer immer jeweils nur diejenigen Steuerelemente verwenden kann, die zu einem sinnvollen Ergebnis führen.
In diesem Zusammenhang wird auch, allerdings seltener, die Eigenschaft Visible auf den Wert False gesetzt, um ein Steuerelement ganz unsichtbar zu machen.
Im nachfolgenden Programm im Projekt EnabledVisible hat der Benutzer die Möglichkeit, zwei Zahlen in zwei Textfeldern einzugeben. Erst wenn beide Textfelder nicht mehr leer sind,
- wird der zuvor abgeblendete erste Button zum Addieren der beiden Zahlen aktiviert
- und der zuvor unsichtbare zweite Button zum Addieren der beiden Zahlen sichtbar gemacht.
Public Class Form1 Private Sub txtEingabe1_TextChanged(... ) Handles txtEingabe1.TextChanged, txtEingabe2.TextChanged If txtEingabe1.Text <> "" And txtEingabe2.Text <> "" Then cmdRechnen1.Enabled = True cmdRechnen2.Visible = True Else cmdRechnen1.Enabled = False cmdRechnen2.Visible = False End If End Sub Private Sub cmdRechnen1_Click(... ) Handles cmdRechnen1.Click, cmdRechnen2.Click Try lblAusgabe.Text = Convert.ToDouble(txtEingabe1.Text) + Convert.ToDouble(txtEingabe2.Text) Catch ex As Exception lblAusgabe.Text = 0 End Try End Sub End Class
Listing 4.2 Projekt »EnabledVisible«
Zur Erläuterung:
- Zu Beginn ist nur ein deaktivierter Button sichtbar, siehe Abbildung 4.4.
Abbildung 4.4 Enabled und Visible vor der Eingabe
- Das Ereignis TextChanged eines Textfelds zeigt an, dass sich der Inhalt geändert hat. Da beide Textfelder zu Beginn leer sind, wird dieses Ereignis aufgerufen, sobald in einem der beiden Textfelder eine Eingabe vorgenommen wurde.
- Die TextChanged-Ereignisse führen zum Aufruf derselben Prozedur (Handles txtEingabe1.TextChanged, txtEingabe2.TextChanged). Innerhalb der Prozedur wird der Inhalt beider Textfelder geprüft.
- Sind beide Textfelder gefüllt, wird die Eigenschaft Enabled des ersten Buttons und die Eigenschaft Visible des zweiten Buttons auf True gesetzt. Der erste Button wird also aktiviert und der zweite Button sichtbar gemacht, siehe Abbildung 4.5.
Abbildung 4.5 Enabled und Visible nach der Eingabe
- Der Vorgang wird wieder rückgängig gemacht, falls mindestens eines der beiden Textfelder leer ist.
Übung
Übung ÜEnabled
Erstellen Sie eine Anwendung mit einem Listenfeld, das mit einigen Elementen gefüllt ist, und mit einem deaktivierten Button ausgestattet ist, siehe Abbildung 4.6. Der Button soll nur aktiviert sein, wenn ein Element markiert ist, siehe Abbildung 4.7. Sobald der Benutzer den Button drückt, wird das aktuell markierte Element aus dem Listenfeld gelöscht. Sobald die Liste leer ist, wird der Button deaktiviert. Er wird auch deaktiviert, wenn kein Element im Listenfeld markiert ist.
Abbildung 4.6 Oberfläche vor dem Markieren
Abbildung 4.7 Oberfläche nach dem Markieren