Разрешаем вводить в TextBox только числа

Довольно часто возникает задача сделать так, чтобы в текстовом поле можно было вводить только числовые данные.

В Delphi (C++ Builder) эта проблема частично решается с помощью установки соответствующих свойств компонента TEdit. Однако ни в Windows Forms ни в WPF этого нет.

Поэтому, запрещать ввод посторонних символов необходимо исключительно в коде программы. К счастью, это сделать не сложно.

Windows Forms

Для того чтобы запретить ввод посторонних символов нужно выполнить фильтрацию ввода в событии KeyPress.

У этого события есть свойство «KeyChar», которое хранит в себе вводимый символ. С помощью метода IsDigit класса Char можно проверить является ли этот символ цифрой. Если да, то разрешаем ввод, если нет запрещаем.

Ввод происходит только тогда, когда логическое свойство «Handled» события равно «ложь». Это позволяет при проверке обойтись без условного оператора.

Если необходимо реализовать ввод десятичных дробей, то просто добавляется дополнительная проверка на соответствие вводимого символа десятичному разделителю и чтобы этот разделитель встречался во введённом тексте не более одного раза.

Конструкция System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator[0] предназначена для того чтобы получить актуальное значение системного десятичного разделителя.

Подсчёт числа вхождений десятичного разделителя для проверки его «единственности» выполняется при помощи следующего метода

WPF

В WPF проверка имеет два коренных отличия:

  • Проверка выполняется при обработке события PreviewTextInput;
  • Вводимый символ имеет строковый формат (string). Как следствие используется другая перегрузка метода IsDigit, а при проверке десятичного разделителя необходимо приведение типов.

Ниже приведён код, который разрешает ввод только цифр.

Ввод десятичных дробей.

Исходный код метода DS_Count аналогичен приведённому для Windows Forms.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *