Das Keypress-Ereignis zur Optimierung von Formularen

Variablen und Ereignisprozeduren

Für die Prüfung der Eingaben benötigen Sie zunächst drei Variablen. Die boolesche Variable boolLoeschen gibt an, ob das letzte Zeichen ungültig ist und gelöscht werden muss. Dies ist notwendig, weil das Löschen des Zeichens nicht in der KeyPress-Ereignisprozedur, sondern erst in der Change-Ereignisprozedur erfolgen kann. Hier müssen Sie dann also wissen, was die Prüfung der Eingabe ergeben hat.

Die Variable lngPos speichert die Cursorposition, bei Tastendruck, um sie nach einer eventuellen Korrektur der Eingabe wieder herstellen zu können. In der Variablen strEingabe wird die bisherige Eingabe ohne das letzte Zeichen gespeichert.

Außer den Variablen benötigen Sie nun noch zwei Ereignisprozeduren, eine für das KeyPress- Ereignis, die andere für das Change-Ereignis. In der Ereignisprozedur für das KeyPress-Ereignis prüfen Sie zunächst mit Hilfe der InArray-Funktion, ob das eingegebene Zeichen innerhalb der Liste der erlaubten Zeichen liegt. Da der ASCIIWert des Zeichens, nicht das Zeichen selbst übergeben wird, müssen Sie für einen Vergleich die Array-Werte mit der ASC-Funktion in deren ASCII-Werte konvertieren.

Gibt die Funktion False zurück, müssen Sie das zuletzt eingegebene Zeichen löschen. Dazu speichern Sie den aktuellen Inhalt des Steuerelements in der Variablen strEingabe. Hierin ist noch nicht die letzte Eingabe enthalten, sie wird erst mit Ausführen des Change-Ereignisses angehängt. Jetzt ist es auch Zeit, das Labelfeld mit der Fehlermeldung einzublenden und auch die aktuelle Cursorposition über die SelStart-Eigenschaft abzurufen und in der Variablen zu speichern.

In der Ereignisprozedur für das Change-Ereignis müssen Sie nun nur noch prüfen, ob die Variable boolLoeschen den Wert True hat. In diesem Fall setzen Sie die Text-Eigenschaft des Steuerelements auf den Wert der Variablen str- Eingabe.

Über die Eigenschaft SelStart positionieren Sie dann den Cursor wieder an der Stelle, die er vor dem Einfügen des letzten Zeichens eingenommen hat.