VB -16: Tasten abfragen

Stets auf der Lauer liegen...

Wir wollen gleich mal eine mögliche Alternativ-Lösung unter die Lupe nehmen: Anstatt auf das Drücken des "Fertig"-Buttons zu warten, muß der User die Enter-Taste drücken. Ihr dürft Euch dann aussuchen, welche Lösung Euch besser gefällt.

Wir entfernen also den Fertig-Button von unserer Hauptform und schreiben den Code in das KeyPress-Ereignis:

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

        If Val(Ergebnis.Text) = x Then
            MsgBox "Richtig!"
           Else
            MsgBox "Leider falsch!"
        End If
        For i = 1 To x           'Kugeln wieder unsichtbar machen
            KugelX(i - 1).Visible = False
        Next
        Zaehlen                  'nächste Zählübung
    End Sub
    

Das KeyPress-Ereignis tritt immer dann ein, wenn der Anwender irgendeine Taste drückt (nicht bei Mausklicks!). Als Argument wird dabei automatisch der ASCII-Code der gedrückten Taste an die Prozedur weitergegeben. Da unsere Ergebnisprüfung nur dann stattfinden soll, wenn der User die Enter-Taste drückt (ASCII-Code = 13), soll die Prozedur sofort wieder verlassen werden (Exit Sub), wenn dies nicht der Fall ist.

Jetzt müssen wir nur noch rechtzeitig die Überwachung der Tasteneingaben einschalten:

    Sub Zaehlen()
        x = Zufallszahl(2, 9)
        Frage.Visible = True            'Frage anzeigen
        For i = 1 To x                  'x Kugeln anzeigen
            KugelX(i - 1).Visible = True '1 abziehen, weil Index mit 0 beginnt!
            Verzoegerung 0.05           
            'kleine Verzögerung, damit wir sehen, wie die Kugeln angezeigt werden
        Next
        Ergebnis.Text = ""              'Textfeld löschen
        Ergebnis.Visible = True         'Antwortfeld anzeigen
        Me.KeyPreview = True            'Tastencodes abfragen
        Ergebnis.SetFocus               'Cursor ins Textfeld setzen
    End Sub
    

Das machen wir hier mit

        Me.KeyPreview = True
        

Dies darf erst dann geschehen, wenn die Zählübung gestartet ist. Würden wir es schon im Design-Modus so einstellen, könnte eine Drücken der Enter-Taste zur Unzeit (z.B. während die Animation noch läuft) unser Programm ganz schön durcheinander bringen .

Das ist schon (fast) alles. Wenn wir jetzt unser Programm laufen lassen, läuft alles wie vorher, nur daß der Fertig-Button verschwunden ist und der User nach Eingabe seiner Zahl die Enter-Taste drücken muß.

Einen kleinen Trick hab ich hier noch reingeschmuggelt : Beim Drücken der Enter-Taste in einem gewöhnlichen Textfeld kommt normalerweise immer ein Pieps. Damit dies nicht geschieht, hab ich unser Textfeld auf "MultiLine=True" gestellt (hier sind Returns im Textfeld erlaubt). Dann muß aber bei der Abfrage denrText, der jetzt aus einer Zahl und einem (unsichtbaren) ASCII-13 besteht, in einen Wert umgewandelt werden (wenn es nur eine Zahl ist, toleriert VB den Vergleich eines "Zahlen"-Textes mit einer Zahl):

    If Val(Ergebnis.Text) = x Then
    

Jetzt entscheidet selber, was Euch besser gefällt...

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.