Tags: | Categories: Silverlight, VB.Net Posted by Christoph on 1/15/2010 11:58 AM | Comments (0)

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

Add comment

  Country flag

biuquote
  • Comment
  • Preview
Loading