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...
© Copyright 1998-2000 J.Behling
Weitergabe und Druck (auch in Teilen, mit Ausnahme von Privatgebrauch) ohne ausdrückliche Genehmigung der Autorin untersagt.