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.
| 1. Bei Eingabebeginn soll Default-Text verschwinden | Wenn 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 wechseln | Die 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 wechseln | Keine 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 Zahlen | Der Programmcode unten zeigt, wie man eine Auswahl von zulässigen Zeichen organisieren kann. |
| 5. Probleme mit Dezimalkomma bzw. Dezimalpunkt sollen ausgeräumt werden | Die 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 |
| '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 End FunctionPrüfeZeichen = Prüfling 'Prüfling ist zulässig! Private Sub Text1_KeyPress(KeyAscii As Integer) 'Aufruf der Prüffunktion KeyAscii = PrüfeZeichen(KeyAscii) End SubIf KeyAscii = 13 Then SendKeys "{tab}" 'wieder Umlenkung auf Tab, Focus weitergeben '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 |