PreviewTextInput удаляет десятичную точку, если это последний символ, но не в середине.C#

Место общения программистов C#
Anonymous
PreviewTextInput удаляет десятичную точку, если это последний символ, но не в середине.

Сообщение Anonymous »

Я использую PreviewTextInput для проверки десятичного числа. Вот мой код:

Код: Выделить всё

private void AmountTextBox_PreviewTextInput(object sender, System.Windows.Input.TextCompositionEventArgs e)
{
TextBox t = sender as TextBox;
string newText = t.Text.Insert(t.SelectionStart,e.Text);

Regex regex = new Regex(@"^[0-9]{1,12}(?:\.[0-9]{0,2})?$");
e.Handled = !regex.IsMatch(newText);
}
Правильно принимаются только цифры и одна десятичная точка, но десятичная точка принимается только в том случае, если пользователь вставляет ее между числами. Если десятичное число вводится в конце строки, оно не добавляется в текстовое поле, даже если регулярное выражение возвращает совпадение (т. е. e.Handled = false). Естественно, при вводе значения пользователь вводит левую часть десятичной дроби, затем десятичную точку, а затем правую часть десятичной точки. Почему десятичная дробь опускается? Это артефакт обработки PreviewTextInput? Я просто упускаю что-то очевидное?

Подробнее здесь: https://stackoverflow.com/questions/785 ... -not-if-it

Вернуться в «C#»