Это приложение, которое я разрабатываю, имеет TextBox с именем txtValue со свойствами MaxLength, установленными в 14, и TextAlign, установленными в Right.Я хочу, чтобы txtValue принимал только валюту, и динамически форматировал ввод, чтобы пользователю не нужно было добавлять запятые, только один период.
Мне удалось сделать так, чтобы txtValue принимал только цифры и одну точку вСобытие txtValue_KeyPress.
txtValue_LostFocus преобразует ввод в формат валюты.
Вот мой код:
Private Sub txtValue_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtValue.KeyPress
'Allows only one dot
If (e.KeyChar.ToString = ".") And (txtValue.Text.Contains(e.KeyChar.ToString)) Then
e.Handled = True
Exit Sub
End If
'Allows only 0 to 9 and dot (once)
If (e.KeyChar.ToString < "0" OrElse e.KeyChar.ToString > "9") _
AndAlso e.KeyChar <> ControlChars.Back _
AndAlso e.KeyChar.ToString <> "." Then
e.Handled = True
End If
End Sub
Private Sub txtValue_LostFocus(sender As Object, e As EventArgs) Handles txtValue.LostFocus
txtValue.Text = Format(Val(txtValue.Text), "000,000,000.00")
End Sub
Я ожидаю ввода -q1w23456789012 .... 34чтобы вернуть выходные данные 123 456 789 012,34, но фактический результат после того, как он потерял фокус, составляет 123 456 789 012,30
Это кажется простым исправлением, например, установив MaxLength равным 15, но тогда, если я не введу точку, это позволитмне нужно набрать 15 чисел, и я хочу, чтобы после периода было только 12 плюс 2.
Я ожидаю, что вход -q1w234 .... 5678 вернет выход 1234,56, но фактический вывод после потери фокуса000,000,001,234.56
Это кажется более сложным исправлением, потому что я не хочу использовать событие LostFocus для проверки того, что я печатаю.Я хочу, чтобы событие KeyPress обрабатывало ввод и динамически форматировало то, что я печатаю.
В этом случае:
Вход 1 будет иметь выход 1.00
Вход 123.4 будетиметь вывод 123.40
Вход 1234.567 будет иметь выход 1234.56
Все это без необходимости в событии LostFocus, но сейчас я использую событие LostFocus, потому что это все мои очень ограниченные знанияпозволяет мне делать.
ОБНОВЛЕНИЕ
Хорошо, я сейчас использую событие Leave, но опять же, я использовал только LostFocus в качестве заполнителя, потому что в конце я хочу, чтобы TextBox отрегулировал то, чтопользователь печатает по мере ввода.