Здравствуйте, очень часто начинающие программисты задают вопрос, как вводить в TextBox только цифры или другие необходимые им символы, игнорируя все остальные. В этой статье мы рассмотрим несколько самых простых и полезных способ решения этой проблемы.
Для этого мы создадим тестовый проект для наглядного примера с одним лишь текстбоксом, у нас он вот такой:
Перво-наперво нам необходимо найти событие, благодаря которому сможем отследить нажатие определенных клавиш. Таким событием является KeyPress. Оно будет происходить всегда, когда пользователь нажимает на любую кнопку на клавиатуре. Чтобы перейти к нему, надо для начала выделить TextBox, один раз щёлкнув на него левой кнопкой мыши.
Затем следует найти в правой стороне рабочей области Visual Studio окно «Свойства» и перейти в нём на вкладку событий (значок в виде молнии):
Примечание: если вы не нашли «Свойства», то просто кликните правой кнопкой мыши по текстбоксу и выберете в появившемся меню соответствующую вкладку.
Далее мы ищем событие KeyPress и дважды нажимаем на него левой кнопкой мыши. Нас перенесет к коду этого события. Далее мы рассмотрим несколько вариантов решения проблемы с вводом определенных символов в TextBox. Сначала будут идти варианты только с выводом цифр, а затем и другие (с Backspace, пробелом, запятой и проч.)
Использование в TextBox только цифр.
Способ первый — самый быстрый.
Внутри этой области кода мы запишем всего несколько строк:
1 2 3 4 5 6 |
char number = e.KeyChar; if (!Char.IsDigit(number)) { e.Handled = true; } |
Вот и всё решение нашей проблемы! Теперь если запустить проект и попробовать что-нибудь написать в нашем TextBox’e, то в него не попадёт ни один другой символ кроме цифр.
Так что же мы тут сделали?
В самой первой строке мы объявили символьную переменную, назвав её number.Благодаря параметру e.KeyChar программа заносит в нашу переменную символ введенной клавиши. Нажали на клавишу «+», в переменную запишется «+», нажали на клавишу «в», в переменную запишется «в» и т.д.
Далее идёт условие !Char.IsDigit(number), которое можно словесно интерпретировать как «если символ из переменной number не относится к категории десятичных цифр» (а нам как раз такие и нужны). А вывод из условия e.Handled = true интерпретируется как «тогда не обрабатывать введенный символ (и, следовательно, не выводить его в TextBox). Иными словами, мы проверяем, является ли любой символ, введенный пользователем десятичной цифрой. Если нет — отбрасываем его, если является — обрабатываем и выводим в TextBox. Легко, просто, быстро!
Способ второй — с кодировкой ASCII.
Однако далеко не всегда можно обойтись только способом, описанным выше. Нам в TextBox’e могут понадобиться и другие символы и клавиши, например, клавиша удаления Backspace, запятая или пробел. В таком случае нам придётся пользоваться помощью таблицей ASCII-кодов. Это совсем несложно. Но для начала разберемся,что вообще такое ASCII.
ASCII — это специальная кодировка, которая присваивает всем используемым в компьютере символам соответствующий числовой код.
Таблицу большинства ASCII-кодов можно просмотреть ниже (кликабельно).
Теперь попробуем написать аналогичный код для вывода только цифр используя коды ASCII. Итак, ищем в таблице, под какими номерами расположены наши цифры. Видимо, что нам необходимы коды с 48 по 57 — цифры от 0 до 9. Значит наш код в событии KeyPress будет таким:
1 2 3 4 5 |
char number = e.KeyChar; if (e.KeyChar <= 47 || e.KeyChar >= 58) { e.Handled = true; } |
Интерпретировать его можно так: «если ASCII-код записанного в переменную number символа будет меньше или равен 47 (все символы в кодировке до цифры «0») или больше или равен 58 (все символы в кодировке после цифры «9»), то не обрабатывать такие символы. При этом оставшиеся символы (как раз все наши цифры) не будут подходить под этот фильтр и поэтому выведутся в TextBox’e.
Ниже приведены коды с различными фильтрациями клавиш и символов, не ограничивающихся только лишь одними цифрами.
Использование в TextBox цифр и клавиши Backspace.
Код, приведенный ниже, дает возможность использовать в TextBox’e не только цифры, но и клавишу удаления Backspace. В нашем варианте мы смешали оба описанных выше способа, но также можно использовать и только второй способ.
1 2 3 4 5 |
char number = e.KeyChar; if (!Char.IsDigit(number) && number != 8) // цифры и клавиша BackSpace { e.Handled = true; } |
Использование в TextBox цифр, запятой и клавиши Backspace.
Если нам потребуется вводить десятичные дроби, то для этой цели понадобится ещё и запятая. Приведем пример кода, на этот раз основанного на ASCII кодировке:
1 2 3 4 5 |
char number = e.KeyChar; if ((e.KeyChar <= 47 || e.KeyChar >= 58) && number != 8 && number != 44) //цифры, клавиша BackSpace и запятая а ASCII { e.Handled = true; } |
Альтернативный вариант:
1 2 3 4 5 |
char number = e.KeyChar; if (!Char.IsDigit(number) && number != 8 && number != 44) // цифры, клавиша BackSpace и запятая { e.Handled = true; } |
Использование в TextBox цифр, запятой, основных математических знаков и клавиши Backspace.
Если есть необходимость в создании, например, калькулятора, то может потребоваться отфильтровать не только цифры, но и некоторые другие математически знаки. Пример кода со знаками умножения, деления, сложения и вычитания, а также со скобками можно увидеть ниже:
1 2 3 4 5 |
char number = e.KeyChar; if ((e.KeyChar <= 47 || e.KeyChar >= 58) && number != 8 && (e.KeyChar <= 39 || e.KeyChar >= 46) && number != 47 && number != 61) //калькулятор { e.Handled = true; } |
Сравнив использованные числовые коды с таблицей ASCII можно легко понять, какой символ соответствует каждому коду.
Вот и всё! Мы рассмотрели самые простые способы ввода в TextBox одних цифр или других необходимых символов на языке C#.
Можно скачать исходный код программы, приведенной в статье со всеми перечисленными вариантами использования.
Скачать исходник
В скором времени мы разберем, как можно создавать вывод в TextBox только букв английского и русского алфавитов, а также знаков препинания. Удачного программирования!
Поделиться в соц. сетях:
Спасибо !!!
Спасибо! Использовала в коде — всё получилось!