VB -25: Zeichenketten (Strings)

Es wird etwas schwieriger...

Wir gehen nun zur Darstellung unserer nächsten Rechenaufgabe über. Wir könnten unsere einfache Additionsaufgabe direkt mit Print auf die Tafel schreiben, wählen aber zur Übung einen anderen Weg, nämlich die Aufgabe als Label darzustellen.

Dazu plazieren wir auf unserer Form ein weiteres Label, "lblAufgabe" und passen es in der Farbe der Tafel an (weiße Schrift auf schwarzem Hintergrund).

Da jetzt entweder die Kugeln und lblFrage oder lblAufgabe aktiv sein können, verallgemeinern wir unsere Routine "KugelUnsichtbar", sodaß sie für alle Fälle paßt:

     Sub Unsichtbar()
        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
        lblAufgabe.Visible = False
        lblFrage.Visible = False
     End Sub
     

Wenn eine Addition ausgewählt wird, tritt folgendes Click-Ereignis ein:

     Private Sub mnuAddition_Click(Index As Integer)
        Unsichtbar                      'evtl. sichtbare Kugeln unsichtbar machen
        ErgebnisWert (Index)            'Zahlenbereich aus Menü-Index bestimmen
        Addition                        'Aufruf unserer Zählübung
        aktiveUebung = "Addition"       'Uebung merken
     End Sub
     

Neu in diesem Click-Ereignis ist die Übergabe des Index. Zur Erinnnerung: Unser Additions-Menü hat verschiedene Zahlenbereiche (Index 0 bis 10, Index 1 bis 20, Index 2 bis 100).

Wir müssen nun zunächst prüfen, in welchem Bereich unser Ergebnis liegen soll. Da wir bei unserer nächsten Übung, der Subtraktion vor dem gleichen Problem stehen werden, lagern wir die Prüfung gleich in eine kleine Prozedur aus:

     Sub ErgebnisWert(Index)
        Select Case Index               'Zahlenbereich aus Menü-Index bestimmen
            Case 0
                MaxErgebnisWert = 10
                MinErgebnisWert = 2
            Case 1
                MaxErgebnisWert = 20
                MinErgebnisWert = 10
            Case Else
                MaxErgebnisWert = 100
                MinErgebnisWert = 20
        End Select
     End Sub
     

MaxErgebnisWert und MinErgebnisWert sollen modulweit bekannt gemacht werden, damit wir auch im KeyPress-Ereignis damit arbeiten können:

     Dim MaxErgebnisWert   'aktuelles Max-Ergebnis modulweit bekanntmachen
     Dim MinErgebnisWert   'aktuelles Min-Ergebnis modulweit bekanntmachen
     

Jetzt müssen wir noch das KeyPress-Ereignis erweitern:

     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

        Unsichtbar                   'Kugeln und Text verschwinden lassen

        Select Case aktiveUebung
        Case "Zählen"
            Zaehlen                  'nächste Zählübung
        Case "SymbAddition"
            SymbAddition             'nächste symb. Addition
        Case "Addition"
            Addition                 'nächste Addition
        Case "Subtraktion"
            'Code für Subtraktion
        Case "Multiplikation"
            'Code für Multiplikation
        Case "Division"
            'Code für Division
        End Select
     End Sub
     

Und natürlich müssen wir auch noch die Aufgabe selber erzeugen. Die Prozedur sieht unserer Symb. Addition sehr ähnlich, nur daß wir hier keine Kugeln sondern Zahlen darstellen müssen.

     Sub Addition()
        summand1 = Zufallszahl(1, MaxErgebnisWert - MinErgebnisWert)  'Summand1
        x = Zufallszahl(MinErgebnisWert, MaxErgebnisWert)    '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

        lblAufgabe.Caption = Str$(summand1) & " +" & Str$(summand2) + " ="
                                        'Aufgabe in Label schreiben
        lblAufgabe.Visible = True       'Aufgabe anzeigen
        txtErgebnis.Text = ""           'Textfeld löschen
        txtErgebnis.Visible = True      'Antwortfeld anzeigen
        Me.KeyPreview = True            'Tastencodes abfragen
        txtErgebnis.SetFocus            'Cursor ins Textfeld setzen
     End Sub
     

Um die Zahlen in unser Aufgaben-Label einzufügen, müssen wir sie zunächst in eine Zeichenkette umwandeln. Dies machen wir mit der Funktion Str$, z.B.

Wir ketten mehrere Zeichenketten zusammen mit dem Zeichenkettenoperator "&".

Anmerkung: Es funktioniert auch mit einem einfachen +, ist aber "unsauber".

Auf diese Weise bilden wir dann die Rechenaufgabe für jede Runde neu:

        lblAufgabe.Caption = Str$(summand1) & " +" & Str$(summand2) + " ="
        

Das war's auch schon. Jetzt können wir zusätzlich zwischen verschiedenen Additionen auswählen.

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.