Kontrollstrukturen ermöglichen die Steuerung des Programmablaufs. Ohne Anweisungen zur Ablaufsteuerung durchläuft die Logik eines Programms Anweisungen von links nach rechts und von oben nach unten. Sehr einfache Programme können zwar in diesem sequentiellen Ablauf geschrieben werden, und manche Abläufe können durch Operatoren gesteuert werden, welche die Hierarchie von Operationen festlegen, aber zur Entwicklung von komplexen, leistungsstarken Programmen ist es wichtig, dass eine Programmiersprache es ermöglicht, die Reihenfolge von Anweisungen mit Hilfe von Kontrollstrukturen und Schleifen zu ändern.
Visual Basic-Prozeduren können Bedingungen prüfen und dann je nach Prüfungsergebnis unterschiedliche Operationen durchführen. Die von Visual Basic unterstützten Entscheidungsstrukturen sind:
· If...Then
· If...Then...Else
· Select Case
If...Then-Blöcke dienen zur bedingten Ausführung einer oder mehrerer Anweisungen. Hierbei können Sie die einzeilige Syntax und die mehrzeilige Blocksyntax verwenden:
If Bedingung Then Anweisung
If Bedingung Then
Anweisungen
End If
Bedingung ist normalerweise ein Vergleich, kann jedoch auch ein beliebiger Ausdruck sein, der einen numerischen Wert ergibt. Visual Basic interpretiert diesen Wert entweder als True oder als False. Der numerische Wert Null entspricht False, und ein numerischer Wert ungleich Null entspricht True. Wenn Bedingung den Wert True hat, führt Visual Basic alle Anweisungen aus, die auf das Schlüsselwort Then folgen. Sie können die einzeilige oder die mehrzeilige Syntax verwenden, um nur eine einzige Anweisung bedingt auszuführen (die beiden folgenden Beispiele sind äquivalent)
If EinDatum < Now Then EinDatum = Now | If
EinDatum < Now Then
EinDatum = Now End If |
Die einzeilige Version von If...Then verwendet keine End If-Anweisung. Falls Sie mehrere Code-Zeilen ausführen möchten, wenn Bedingung den Wert True hat, müssen Sie einen mehrzeiligen Syntaxblock mit If...Then...End If verwenden.
If EinDatum < Now Then
EinDatum = Now
Timer1.Enabled = False ' Zeitgeber-Steuerelement deaktivieren
End If
Verwenden Sie einen If...Then...Else-Block, um mehrere Anweisungsblöcke zu definieren, von denen einer ausgeführt wird:
If Bedingung1 Then
.... [Anweisungsblock-1]
[ElseIf Bedingung2 Then
.... [Anweisungsblock-2]] ...
[Else
.... [Anweisungsblock-n]]
End If
Visual Basic prüft zunächst Bedingung1. Wenn diese Bedingung den Wert False hat, prüft Visual Basic Bedingung2. Dies wird so lange fortgesetzt, bis eine Bedingung gefunden wird, die den Wert True hat. Wenn Visual Basic eine Bedingung findet, die den Wert True hat, wird der entsprechende Anweisungsblock ausgeführt, und die Ausführung wird dann mit dem Code fortgesetzt, der auf End If folgt. Optional kann ein Else-Anweisungsblock verwendet werden, den Visual Basic ausführt, wenn keine Bedingung den Wert True hat.
If...Then...ElseIf ist im Grunde nur ein Sonderfall von If...Then...Else. Sie können eine beliebige Anzahl von ElseIf-Abschnitten (oder auch überhaupt keinen) verwenden. Die Verwendung eines Else-Abschnitts ist unabhängig von der Verwendung von ElseIf-Abschnitten möglich.
Ihre Anwendung kann beispielsweise unterschiedliche Operationen durchführen, die davon abhängen, auf welches Steuerelement in einem Menü-Steuerelementefeld geklickt wird:
Private Sub mnuCut_Click (Index As Integer)
If Index = 0 Then ' Befehl "Ausschneiden".
CopyActiveControl ' Allgemeine Prozeduren aufrufen.
ClearActiveControl
ElseIf Index = 1 Then ' Befehl "Kopieren".
CopyActiveControl
ElseIf Index = 2 Then ' Befehl "Löschen".
ClearActiveControl
Else ' Befehl "Einfügen".
PasteActiveControl
End If
End Sub
In Visual Basic ist die Select Case-Struktur als Alternative zu If...Then...ElseIf verfügbar, wenn bei mehreren Anweisungsblöcken ein Block selektiv ausgeführt werden soll. Die Funktionalität der Select Case-Anweisung ist der Funktionalität der If...Then...Else-Anweisung ähnlich, aber Select Case erzeugt effizienteren Code und ist besser lesbar, wenn es mehrere Auswahlmöglichkeiten gibt.
Eine Select Case-Struktur arbeitet mit einem einzigen Prüfausdruck, der nur einmal zu Beginn der Struktur ausgewertet wird. Visual Basic vergleicht das Ergebnis dieses Ausdrucks anschließend mit den Werten der möglichen Fälle, die durch Case eingeleitet werden. Wenn eine Übereinstimmung vorliegt, wird der zu diesem Fall gehörige Anweisungsblock ausgeführt:
Select Case Prüfausdruck
[Case Ausdrucksliste1
.... [Anweisungsblock-1]]
[Case Ausdrucksliste2
.... [Anweisungsblock-2]]
[Case Else
.... [Anweisungsblock-n]]
End Select
Jede Ausdrucksliste ist eine aus einem oder mehreren Werten bestehende Liste. Wenn sich in einer Liste mehrere Werte befinden, werden die einzelnen Werte durch Kommas voneinander getrennt. Jeder Anweisungsblock enthält keine, eine oder mehrere Anweisungen. Wenn mehrere Case-Fälle mit dem Prüfausdruck übereinstimmen, wird nur der Anweisungsblock ausgeführt, der dem ersten übereinstimmenden Case-Fall zugeordnet ist. Visual Basic führt die Anweisungen im (optionalen) Case Else-Abschnitt aus, wenn keiner der Werte in der Ausdrucksliste mit dem Prüfausdruck übereinstimmt.
Private Sub mnuCut_Click (Index As Integer)
Select Case Index
Case 0 ' Befehl "Ausschneiden".
CopyActiveControl ' Allgemeine Prozedur aufrufen.
ClearActiveControl
Case 1 ' Befehl "Kopieren".
CopyActiveControl
Case 2 ' Befehl "Löschen".
ClearActiveControl
Case 3 ' Befehl "Einfügen".
PasteActiveControl
Case Else
frmFind.Show ' Dialogfeld "Suchen" anzeigen.
End Select
End Sub
Angenommen, Sie fügen dem Menü Bearbeiten im If..Then..ElseIf-Beispiel einen weiteren Befehl hinzu. Sie könnten dann einen weiteren ElseIf-Abschnitt hinzufügen oder aber die Funktion mit Select Case umschreiben:
Die Select Case-Struktur wertet einen Ausdruck nur einmal zu Beginn der Struktur aus. Die If...Then...ElseIf-Struktur kann dagegen in jeder ElseIf-Anweisung einen anderen Ausdruck auswerten. Sie können eine If...Then...ElseIf-Struktur nur dann durch eine Select Case-Struktur ersetzen, wenn die If-Anweisung und alle ElseIf-Anweisungen denselben Ausdruck auswerten.