in einem Silverlight Projekt hatten wir die Notwendigkeit, eine Textbox zu benutzen, die nur die Eingabe einer Fliesskommazahl (in dem Fall eines Währungwertes) zu erlauben.
Da wir nicht dringend eine externe Komponente einsetzen wolllten habe ich das Problem mit folgendem Code gelösst:
Dabei wird im New-Event des Controls ein KeyDown-Event an die Textbox gebunden, der bei jesem Tastendruck überprüft, ob es ein für eine Fliesskommazahl gültiges Zeichen ist.
Leider ist das “,” nicht in der Key Enumeration, und muss händisch über den KeyCode abgehandelt werden. Dabei ist zu beachten, dass das “,” in 3 Varianten abgefragt werden muss: normales “,”, Zehnertastatus und auf dem Mac gibts (wie sollte es anders sein) einen anderen Zahlencode für das “,”.
und hier der Codesnippet:
Public Sub New()
InitializeComponent()
AddHandler tbTbx.KeyDown, AddressOf OnlyNumbers
End Sub
Public Sub OnlyNumbers(ByVal sender As Object, ByVal e As KeyEventArgs)
Select Case e.Key
Case Key.Tab
Return
Case Key.D0
Case Key.D1
Case Key.D2
Case Key.D3
Case Key.D4
Case Key.D5
Case Key.D6
Case Key.D7
Case Key.D8
Case Key.D9
Case Key.NumPad0
Case Key.NumPad1
Case Key.NumPad2
Case Key.NumPad3
Case Key.NumPad4
Case Key.NumPad5
Case Key.NumPad6
Case Key.NumPad7
Case Key.NumPad8
Case Key.NumPad9
Case Key.Decimal ' ,
Case Else
Select Case e.PlatformKeyCode
Case 188, 110, 43 ' ",", ", Numpad" , ", Mac"
If tbTbx.Text.IndexOf(",") > -1 Then
e.Handled = True
Return
End If
Case Else
e.Handled = True
Return
End Select
End Select
End Sub
497ad4e4-f9e3-473d-9a69-b725fb1604eb|0|.0