PDA

Vollständige Version anzeigen : VB.NET --> Nur bestimmte Zeichen (Eingaben) in TextBox zulassen


tracid05
31.08.2004, 15:01
Hallo zusammen,

ich habe auf einer Windows-Form 3 Textfelder. Jedes Textfeld hat ein anderes Event (KeyPress, KeyDown, KeyUp).
Es soll in jedem der Textfelder nur möglich sein, folgendes einzugeben:
- Buchstaben (groß/klein)
- Backspace
- Space
- Ziffern/Zahlen
- Zeichen: ß

Ausgenommen sind also alle anderen Zeichen. Beim „KeyPress“-Event klappt dies auch wunderbar mit folgendem Code:


Private Sub txtEingabe_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtEingabe.KeyPress
Select Case Asc(e.KeyChar)
Case 8, 32, 48 To 57, 65 To 90, 97 To 122, 223
' 8 Backspace
' 32 Leerzeichen
' 48-57 Ziffern
' 65-90 Buchstaben (groß)
' 97-122 Buchstaben (klein)
' 223 ß

Case Else
' Alle anderen Eingaben werden unterdrückt
e.Handled = True
End Select
End Sub


Wie mache ich dies aber bei den beiden anderen Textfelder mit den Events „KeyUp“ und „KeyDown“? Wer weiß Rat? Ich komme leider zu keiner lauffähigen Lösung.

Noodles
01.09.2004, 14:25
Warum nimmst Du nicht für jede TextBox das KeyPress Event?

Angel-Knight
07.09.2004, 15:22
sieht für mich nach ner übungsaufgabe aus.....


ka der unterschied besteht ja darin das bei den letzten zwei ereignissen der tasten druck schon geschehen ist, ich weiss nicht ob man das da noch abfangen kann....

tracid05
23.09.2004, 13:05
sieht für mich nach ner übungsaufgabe aus.....


ka der unterschied besteht ja darin das bei den letzten zwei ereignissen der tasten druck schon geschehen ist, ich weiss nicht ob man das da noch abfangen kann....

Hi!

Nee, es ist keine Übungsaufgabe!

Ja, das Problem ist einfach, dass bei dem KeyDown-Event, die Taste die gedrückt wird, immer zu sehen ist. Wie ich das umgehen kann, weiß ich nicht. Bei KeyUp habe ich mittlerweile eine halbwegs vernünftige Lösung, aber auch die funktioniert nicht ganz zuverlässig:


Private Sub txtEingabe3_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtEingabe3.KeyDown

Select Case (e.KeyData)
Case 220, 221, 65584 To 65593, 65755, 65756, 65757, 226, 188, 190, 189, 65724, 65726, 65725, 65762, 393442, 65723, 393403, 187, 191, 65727, 393266, 393267, 393271, 393272, 393273, 393264, 393435, 393297, 393285, 393293, 111, 106, 109, 107, 110

Dim text() As Char
Dim i As Int64

text = txtEingabe3.Text.ToCharArray()
txtEingabe3.Clear()
For i = 0 To text.Length - 1
Select Case (Asc(text(i)))
Case 176, 96, 33, 34, 167, 37, 38, 47, 40, 41, 61, 63, 94, 180, 62, 44, 46, 45, 59, 58, 95, 60, 124, 43, 126, 42, 35, 39, 178, 179, 123, 91, 93, 125, 92, 64, 128, 181
'Diese Zeichen werden gelöscht!
Case Else
txtEingabe3.AppendText(text(i))
End Select
Next i
txtEingabe3.SelectionStart = Len(txtEingabe3.Text)
txtEingabe3.ScrollToCaret()

Case Else
End Select
End Sub