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.