c# может textbox принимать только числа?


#1

Хочу что бы пользователь в textbox в моём WPF приложении мог вводить только числа, как на многих сайтах существуют такие поля. Можно ли это как-то реализовать? Или всегда придётся проверять на соответствие ввода определённому шаблону?


#2

возможно. Для реализации сперва данному textbox нужно добавить предварительный просмотр вводимого текста:

<TextBox PreviewTextInput="PreviewTextInput"/>

Затем внутри установите e.Handled проверяющий разрешён ли введённый текст или нет
e.Handled = !IsTextAllowed(e.Text);

Для проверки разрешён ли текст можно использовать простое регулярное выражение в методе IsTextAllowed. Поскольку в данном случае нужно разрешить ввод только числе, то регулярное выражение имеет следующий вид: "[^0-9.-]+". Если нужно разрешить ввод только текст, то регулярное выражение нужно просто заменить на [^a-zA-Z].

private static readonly Regex onlyNumbers = new Regex("[^0-9.-]+"); //regex that matches disallowed text

private static bool IsTextAllowed(string text)
{
    return !onlyNumbers.IsMatch(text);
}