Make your own free website on Tripod.com

VB -21: Select Case

Von Fall zu Fall...

Nun wird es aber Zeit, daß wir auch die anderen Menüpunkte bevölkern! Dazu nehmen wir zunächst den Aufruf unserer Zählübung aus dem Activate-Ereignis heraus und packen ihn in das entsprechende Click-Ereignis des Menüs:

     Private Sub mnuZaehlen_Click()
         Zaehlen                         'Aufruf unserer Zählübung
         aktiveUebung = "Zählen"         'Uebung merken
     End Sub
     

Damit wir beim Auswerten wissen, welche Übung gerade aktiv ist, setzen wir hier noch eine Flagge "aktiveUebung" und machen sie für das ganze Modul bekannt:

     Dim aktiveUebung    'aktuelle Übungsart modulweit bekannt machen
     

Beim Start fordern wir dazu auf, eine Übung auszuwählen, anstatt wie bisher gleich mit dem Zählen anzufangen:

     Private Sub Form_Activate()
       ...

       MsgBox "Bitte suche eine Übung aus!", vbExclamation
     End Sub
     

Da wir nun bei der Abfrage des Ergebnisses nicht mehr unbedingt wieder eine Zählübung aufrufen wollen, müssen wir Alternativen auswerten. Wir könnten das mit einer Folge von IF-Abfragen erledigen, eleganter in einem solchen Fall ist jedoch die "Case"-Abfrage:

        Select Case Ausdruck
        Case Wert1
             ...
        [Case Wert2
             ...]
        [Case Else
             ...[elsestatements]]
        End Select
 

"Ausdruck" bezeichnet eine Variable oder Konstante, auf die geprüft werden soll. Es muß mindestens eine Auswahlmöglichkeit gegeben werden, "Wert1", es können aber auch beliebig viele sein. Soll eine Befehlsfolge für mehrere Werte durchgeführt werden, kann man diese auch zusammenfassen:

        Case Wert1, Wert2, Wert3
        

Ein optionales "Case Else" ermöglicht eine "Sammelreaktion" auf Werte, die nicht näher spezifiziert sind.

In unserem Fall ändern wir das KeyPress-Event folgendermaßen ab:

     Private Sub Form_KeyPress(KeyAscii As Integer)
        If KeyAscii <> vbKeyReturn Then Exit Sub
        'Prüfen ob Enter gedrückt wurde, sonst ignorieren

        If Val(txtErgebnis.Text) = x Then
            MsgBox "Richtig!"
           Else
            MsgBox "Leider falsch!"
        End If

        Select Case aktiveUebung
        Case "Zählen"
            KugelnUnsichtbar         'Kugeln verschwinden lassen
            Zaehlen                  'nächste Zählübung
        Case "SymbAddition"
            KugelnUnsichtbar         'Kugeln verschwinden lassen
            SymbAddition             'nächste symb. Addition
        Case "Addition"
            'Aufruf Addition         'nächste Addition
        Case "Subtraktion"
            'Aufruf Subtraktion      'nächste Subtraktion
        Case "Multiplikation"
            'Aufruf Multiplikation   'nächste Multiplikation
        Case "Division"
            'Aufruf Division         'nächste Division
        End Select
     End Sub
     

Den Abfragecode für die anderen Übungen schreiben wir später, ich habe daher zunächst mal Kommentare als Platzhalter hineingeschrieben.

Das Unsichtbarmachen der Kugeln lagern wir in eine eigene Prozedur aus, da wir diese öfter benötigen.

Doch nun zu unserer nächsten Rechenübung, der Addition mit Symbolen. Wir ordnen dazu zunächst auf unserer Form eine zweite Sorte von Kugeln an, zur Unterscheidung von den roten nehmen wir diesmal hellblaue. Wir nennen sie imgKugelY und weisen ihr ebenfalls einen Index 0 zu. Auch hier laden wir die restlichen Kugeln erst zur Laufzeit im Form_Load-Ereignis:

    Private Sub Form_Load()
        For i = 1 To 8             'rote Kugeln
            Load imgKugelX(i)      'benötigte Anzahl Kugeln laden
            imgKugelX(i).Left = imgKugelX(i - 1).Left + imgKugelX(i).Width * 1.2
            'Kugeln positionieren
        Next
        For i = 1 To 8             'blaue Kugeln
            Load imgKugelY(i)      'benötigte Anzahl Kugeln laden
            imgKugelY(i).Left = imgKugelY(i - 1).Left + imgKugelY(i).Width * 1.2
            'Kugeln positionieren
        Next
    End Sub
    

Anmerkung: Euch fällt sicher auf, daß es hier um zwei fast gleiche Befehlsfolgen handelt. Es würde sich also anbieten, auch das zu verallgemeinern und auszulagern. Das wollen wir uns für später vorbehalten...

Und hier noch die Prozedur für das Unsichtbarmachen der Kugeln:

    Sub KugelnUnsichtbar
        For i = 1 To 9           'alle roten Kugeln unsichtbar machen
            imgKugelX(i - 1).Visible = False
        Next
        For i = 1 To 9           'alle blauen Kugeln unsichtbar machen
            imgKugelY(i - 1).Visible = False
        Next
    End Sub
    

Sicherheitshalber werden alle Kugeln unsichtbar gemacht. Wir ersparen uns das damit Abfragen, welche Übung zuletzt aktiv war.

Jetzt fehlt noch der Code für die Additionsübung. Er sieht ganz ähnlich aus wie unsere Zählübung, nur daß wir hier beide Summanden generieren und darstellen müssen:

    Sub SymbAddition()
        Summand1 = Zufallszahl(1, 5)    'Summand1
        x = Zufallszahl(2, 9)           'Ergebnis

        Select Case x                   'prüfen, ob Ergebnis vernünftig ist
        Case Is <  Summand1              'negativ
            Summand2 = x                'Summanden vertauschen
            x = Summand1
            Summand1 = x - Summand2
        Case Is = Summand1
            x = x + 1                   'Ergebnis um eins erhöhen
            Summand2 = 1                'Summand2
        Case Else
            Summand2 = x - Summand1     'Summand2
        End Select

        For i = 1 To Summand1           'rote Kugeln anzeigen
            imgKugelX(i - 1).Visible = True
            Verzoegerung 0.05
        Next
        For i = 1 To Summand2           'blaue Kugeln anzeigen
            imgKugelY(i - 1).Visible = True
            Verzoegerung 0.05
        Next
        lblFrage.Visible = True         'Frage anzeigen
        txtErgebnis.Text = ""           'Textfeld löschen
        txtErgebnis.Visible = True      'Antwortfeld anzeigen
        Me.KeyPreview = True            'Tastencodes abfragen
        txtErgebnis.SetFocus            'Cursor ins Textfeld setzen
    End Sub
    

Da das Ergebnis bei unserem Zufallszahlengenerator auch kleiner als oder gleich dem ersten Summanden sein könnte, müssen notfalls Ergebnis und Summanden vertauscht oder das Ergebnis um eins erhöht werden. Deshalb auch hier wieder eine Case-Abfrage am Anfang. Der Rest dient dann nur noch der Darstellung der roten und blauen Kugeln.

Im Prinzip können wir jetzt schon endlos Addieren üben. Ein paar kleine Schönheitsfehler hat unser Programm jedoch noch...

Beispielprojekt laden

zurück Index weiter


© Copyright 1998-2000 J.Behling EMail schreiben ABC-Ware's Homepage
Weitergabe und Druck (auch in Teilen, mit Ausnahme von Privatgebrauch) ohne ausdrückliche Genehmigung der Autorin untersagt.