Das Keypress-Ereignis zur Optimierung von Formularen

Eingaben auf bestimmte Zeichen beschränken

Sie benötigen dazu ein Eingabefeld, in dessen Tag-Eigenschaft Sie die Zeichen definieren, die zulässig sein sollen. Sie geben sie als Liste, getrennt durch Kommata, in das Feld Marke ein (Bild 1). Die Liste in Bild 1 gibt an, dass nur Kleinbuchstaben von 1 bis z gültig sind, also ohne Umlaute und „ß“.

Bild 1: Definieren der erlaubten Zeichen in der Eigenschaft Marke.
Bild 1: Definieren der erlaubten Zeichen in der Eigenschaft Marke.

Wenn der Benutzer aus der Beschriftung des Feldes nicht erkennen kann, dass bestimmte Zeichen nicht zulässig sind, sollten Sie ein zusätzliches Labelfeld einfügen, das bei einer Fehleingabe die zulässigen Zeichen anzeigt. Damit das Feld nicht angezeigt wird, solange korrekte Eingaben erfolgen, setzen Sie deren Eigenschaft Sichtbar auf Nein. Nun fehlt natürlich noch etwas Code. Zunächst sollten Sie eine Funktion schreiben, der Sie den Inhalt der Tag-Eigenschaft (Marker- Eigenschaft im Eigenschaftenfenster) sowie das eingegebene Zeichen übergeben. Die Funktion durchläuft dann das aus der Tag-Eigenschaft erzeugte Array und prüft, ob das eingegebene Zeichen darin vorkommt. Falls nicht, ist es nicht zulässig und die InArray-Funktion (siehe Listing 1) gibt False zurück.

Dim boolLoeschen As Boolean
Dim strEingabe As String
Dim lngPos As Long
Private Sub txtTexteingabe_Change()
If boolLoeschen = True Then
Me.txtTexteingabe.Text = strEingabe
'Cursor am Ende positionieren
Me.txtTexteingabe.SelStart = lngPos
End If
End Sub
Private Sub txtTexteingabe_KeyPress(KeyAscii As Integer)
If inArray(Me.txtTexteingabe.Tag, KeyAscii) = False Then
Me.lblFehler.Caption = "Es sind nur folgende Zeichen erlaubt: " & Me.txtTexteingabe.Tag
Me.lblFehler.Visible = True
lngPos = Me.txtTexteingabe.SelStart
strEingabe = Me.txtTexteingabe.Text
boolLoeschen = True
Else
Me.lblFehler.Visible = False
boolLoeschen = False
End If
End Sub
Function inArray(strDaten As String, intZeichen As Integer)
Dim arrZeichen As Variant
Dim varZchn As Variant
inArray = False
arrZeichen = Split(strDaten, ",")
For Each varZchn In arrZeichen
If Asc(varZchn) = intZeichen Then
inArray = True
Exit Function
End If
Next varZchn
End Function