Я использую xaml <TextBox/>
с кодом, который содержит событие PreviewTextchanged
с именем NumberValidationTextBox и событие TextChanged
с именем OnTextChanged:
public void NumberValidationTextBox(object sender, TextCompositionEventArgs e)
{
Regex regex = new Regex("^-?[0-9]*[\\.,]?[0-9]?[0-9]?$");
var futureText = $"{(sender as TextBox).Text}{e.Text}";
e.Handled = !regex.IsMatch(futureText);
}
private void OnTextChanged(object sender, TextChangedEventArgs e)
{
var myInput = sender as TextBox;
myInput.Text = myInput.Text.Replace(",", ".").Trim();
myInput.CaretIndex = myInput.Text.Length;
}
Проблема в том, что когда набирается номер, например: 123.23
, и я выбираю номер, щелкая и перетаскивая мышью, и пытаюсь заменить его типом следующего номера - он не меняется, потому что его блокирует регулярное выражение. Только использование Backspace является решением в этом случае. Итак, я хочу изменить выделенный текст, когда TextBox заполнен.
Все подробности выше и здесь ссылка с сс: https://i.ibb.co/z7rPfpj/123.png
Как это исправить? Спасибо.
Регекс работает. Я не могу заменить набранный номер ex. 123.99
, выбрав номер и введите другой номер (без использования пробела).
Вот скриншот с одним выбранным, чтобы лучше понять, что я имею в виду: ссылка
Замените свой метод NumberValidationTextBox
на:
public void NumberValidationTextBox(object sender, TextCompositionEventArgs e)
{
Regex regex = new Regex("^-?[0-9]*[\\.,]?[0-9]?[0-9]?$");
var tb = sender as TextBox;
var futureText = "";
if (tb.SelectedText != "")
{
futureText = tb.Text.Replace(tb.SelectedText, e.Text);
e.Handled = !regex.IsMatch(futureText);
return;
}
futureText = tb.Text + e.Text;
e.Handled = !regex.IsMatch(futureText);
}
вы тестируете SelectedText, чтобы проверить, выбраны ли некоторые символы
Сегодня протестирую. Почему люди ставят оценку -1?
это жизнь...неважно!!
то, что вы описываете, - это то, что он делает, я предлагаю вам уточнить, что именно вы хотите, кажется, вам нужно пересмотреть всю свою логику....