В WinForms вы можете сделать это, используя TextChanged-Event для Textbox и RegularExpressions:
Пример:
Imports System.Text.RegularExpressions
Public Class Form1
Private Sub TextBox1_TextChanged(sender As System.Object, e As System.EventArgs) Handles TextBox1.TextChanged
'** Regex Pattern
Dim pattern As String = "^(([0-9]{1,3})|([0-9]{1,3}(\.){1,1}([0-9]){0,3}))$"
'** Copy of the Textbox Content
Dim strText As String = TextBox1.Text
'** Remove chars at the end of the string until the Textbox is empty or the contained chars are valid
While Not Regex.IsMatch(strText, pattern) AndAlso Not strText = ""
strText = strText.Substring(0, strText.Length - 1)
End While
'** Set the new text
TextBox1.Text = strText
'** Set the caret to the end of the string in the textbox
TextBox1.Select(TextBox1.Text.Length, 0)
End Sub
End Class
Этот пример позволяет написать 123
, 345.
, 12.
, 123.1
, 123.123
и т. Д. *
Чтобы улучшить количество цифр до или после десятичной запятой, вы можете отредактировать {0,3}
в шаблоне (первые 2 раза для цифр до десятичной запятой и третий раз для цифр после десятичной) Просто установите вместо 3 желаемое количество цифр (или замените его на *
или {0,}
для неограниченного числа)
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ 1:
- Изменен шаблон с
"^[0-9]{0,3}(\.){0,1}$"
на "^(([0-9]{1,3})|([0-9]{1,3}(\.){1,1}([0-9]){0,3}))$"
, чтобы разрешить ввод цифр после десятичной дроби
- Исправлено условие цикла Loop с
Textbox1.Text = ""
до strText = ""