TextBoxen für Fortgeschrittene


Beliebt als Eingabefelder für Tastatureingaben. Bei moderner Programmierung soll man Tastatureingaben auf das unerläßliche Maß reduzieren, also besser Auswahlen anbieten oder graphische Elemente für die Eingabe z.B. von Zahlen vorsehen. Wenn Textfelder für Zahleingabe vorgesehen sind, ist es wichtig, schon im Entwurf Defaultwerte vorzusehen, denn die Auswertung leerer Textfelder kann zu Programmabbrüchen führen. Oft hat der Nutzer Wünsche, die nur mit gewissem Aufwand zu erfüllen sind. Einige solcher Wünsche werden kurz behandelt.
Die praktische Nutzung von TextBoxen ist im Beispielprogramm "Währungsrechner" gezeigt.


Häufige Wünsche

1. Bei Eingabebeginn soll Default-Text verschwindenWenn ein Steuerelement automatisch oder durch Mausklick "den Focus" erhält, d.h. wenn in einer Textbox der blinkende Cursor erscheint, wird ein "GotFocus"-Ereignis gemeldet, das sich programmtechnisch auswerten läßt. Es kann die Löschung des Textes programmiert werden (siehe Beispiel unten).
2. Focus soll nach "Return" in die nächste Textbox wechselnDie Reihenfolge, in der Textboxen oder andere Eingabeelemente angesprungen werden, wird duch die Eigenschaft "TabIndex" des betreffenden Steuerelements festgelegt. Bei Öffnung des Formulars wird das Steuerelement mit TabIndex 0 aktiviert. Jede Tabulatorbenutzung erhöht den Index um 1 und aktiviert das zugehörige Steuerelement. Man lenkt das Signal der "Return"-Taste um, erzeugt einen Tabulator und bewirkt damit den gewünschten Wechsel des Eingabefocus (Beispiel 2 unten).
3. Nach letzter Eingabe soll Focus auf einen Button wechselnKeine besondere Maßnahme erforderlich, der gewünschte Button muß bloß den nächst höheren TabIndex erhalten.
4. Die Textbox soll nur spezielle Zeichen annehmen, z. B. nur ZahlenDer Programmcode unten zeigt, wie man eine Auswahl von zulässigen Zeichen organisieren kann.
5. Probleme mit Dezimalkomma bzw. Dezimalpunkt sollen ausgeräumt werdenDie Eingabe von Komma oder Punkt werden aufgefangen und unter Berücksichtigung der nationalen Einstellung so angezeigt, wie gerade nötig. Siehe den letzten Teil des Beipielprogramms

... und wie sie erfüllt werden können

'Zu1: Das GotFocus-Ereignis auswerten:
'Hier ist ein Steuerelementefeld vorausgesetzt,
'Index ist die Nummer des gerade angesprochenen Feldes.
'Lösche Default-Text


Private Sub Text1_GotFocus(Index As Integer)
Text1(Index).Text = ""
End Sub
'Zu 2: Das KeyPress-Ereignis umlenken:
'Hier wieder ein Steuerelementefeld in dem der Cursor weitergegeben wird!


Private Sub Text1_KeyPress(Index As Integer, KeyAscii As Integer)
If KeyAscii = 13 Then  'wenn "Return"
SendKeys "{tab}" 'drücke "Tabulator"
KeyAscii = 0 'mach "Return" weg
End If
End Sub
'Zu 4: Zeichenauswahl

Function PrüfeZeichen(Prüfling As Integer) As String
Const Zeichen = "-eE0123456789,." 'hier die erlaubten Zeichen eintragen!
If Not (Prüfling = 8 Or Prüfling = 13) Then
'Backspace = 8, Return = 13 sollen zugelassen werden
If InStr(Zeichen, Chr(Prüfling)) = 0 Then
PrüfeZeichen = 0
Exit Function 'Prüfling war unzulässig!
End If
End If
PrüfeZeichen = Prüfling 'Prüfling ist zulässig!
End Function
Private Sub Text1_KeyPress(KeyAscii As Integer) 'Aufruf der Prüffunktion
KeyAscii = PrüfeZeichen(KeyAscii)
If KeyAscii = 13 Then SendKeys "{tab}" 'wieder Umlenkung auf Tab, Focus weitergeben
End Sub
'Zu 5: Komma bzw. Punkt, anderer Test auf Ziffern

Private Sub ÄnderOpt_KeyPress(KeyAscii As Integer)'Abfangen von Kommas, Punkt, Return
Dim testzahl$
testzahl = "4,3" 'Ländereinstellung rauskriegen
If CSng(testzahl) <> 43 Then 'deutsch
If KeyAscii = 46 Then KeyAscii = 44 'Komma
If KeyAscii = 44 And InStr(ÄnderOpt.Text, ",") <> 0 Then KeyAscii = 0 'nur ein Komma!
If (KeyAscii < 48 And KeyAscii > 31) And Not (KeyAscii = 44 Or KeyAscii = 45) Then KeyAscii = 0
If KeyAscii > 59 And Not (KeyAscii = 69 Or KeyAscii = 101) Then KeyAscii = 0
Else 'englisch
If KeyAscii = 44 Then KeyAscii = 46 'Punkt
If KeyAscii = 46 And InStr(ÄnderOpt.Text, ".") <> 0 Then KeyAscii = 0 'nur ein Komma!
If KeyAscii < 48 And KeyAscii > 31 And Not (KeyAscii = 46 Or KeyAscii = 45) Then KeyAscii = 0
If KeyAscii > 59 And Not (KeyAscii = 69 Or KeyAscii = 101) Then KeyAscii = 0
End If
End Sub
'Zugabe: Kontrollanzeige des eingegebenen Textes (in einem Steuerelementefeld)

Private Sub Text1_Change(Index As Integer)
Label1.Caption = Text1(Index)
End Sub

© R. Hirte * 2002/2004