Иногда встает задача ограничивать возможность ввода в поле элемента Windows Forms - TextBox.
К примеру, мы хотим, что б данный контрол принимал от пользователя только числа. Скажу сразу, что для таких ситуаций предусмотрен контрол MaskedTextBox с его настраиваемой маской ввода. Но будем считать, что сегодня нас интересует только TextBox.
Итак, для осуществления данной затеи, нам потребуется ровно 1 минута времени, засекайте.
1. Кладем на форму элемент TextBox;
2. Переходим в раздел событий вкладки Properties и подписываемся на событие KeyPress данного TextBox-а;
3. В сгенерированном обработчике события вставляем код:
private void myTextBox_KeyPress(
object sender, KeyPressEventArgs e)
{
if (e.KeyChar != 8 && (e.KeyChar < 48 || e.KeyChar > 57))
e.Handled = true;
}
Обратите внимание на присутствие в условии сравнения кода вводимого символа с числом 8. Это дает возможность обрабатывать клавишу BackSpase. В итоге, не будут игнорироваться лишь нажатия клавиш цифр, BackSpase, ну и прочих вспомогательных (курсор, Delete ...).
Конечно, существует и масса других вариантов реализации данной функциональности, однако, на мой взгляд данный подход самый простой и быстрый в реализации.
И все таки, если вам требуется вводить лишь цифры (целочисленные числа), то как вариант возможно воспользоваться методом Char.IsDigit:
private void myTextBox_KeyPress(
object sender, KeyPressEventArgs e)
{
if (!Char.IsDigit(e.KeyChar))
e.Handled = true;
}