Всем привет! Сегодня я покажу один из вариантов того, как можно реализовать запрет на ввод информации.
Думаю многие из вас сталкивались с тем что в программах невозможен ввод в поле имени, часть символов состоящих из цифры, Такое встречается только в играх, но в реальности то мы знаем, что такого быть не должно. А само имя или фамилия должно исключительно состоять только из букв.
В примере ниже рассмотрим запрет ввода цифр в текстбокс и запретим пользователю ввод прописных букв. Пример очень простой и занимает всего пару строк кода.
1 2 3 4 5 6 7 8 9 10 11 12 |
private void txt_PreviewTextInput(object sender, TextCompositionEventArgs e) { if (int.TryParse(e.Text, out int i)) { e.Handled = true; } if (e.Text==e.Text.ToLower()) { e.Handled = true; } } |
Как видим из кода у нас имеется TextBox с именем txt, у которого имеется событие PreviewTextInput. Внутри этого события, используем условии на проверку, введенный пользователем символ приводим к целочисленному типу, если это число то событие завершается, а символ не печатается в TextBox. Во втором условии, происходит проверка символа, в сравнении с нижним регистром этого же символа, если они равны, это будет означать, что пользователь ввел символ в нижнем регистре.
Следующий пример более сложный но более верный, так как он пропускает ввод запятой при чем одной и она не должна быть первой, и не встречаться в середине числа не сколько раз, да бы мы могли полученное число привести к вещественному типу. Для этого нам необходимо подписаться на события TextBox KeyPress и TextChanged
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
private void txt_KeyPress(object sender, KeyPressEventArgs e) { if (Char.IsNumber(e.KeyChar) | (e.KeyChar == Convert.ToChar(",")) | e.KeyChar == '\b') { TextBox str = (TextBox)sender; int count = 0; if (str.Text.Length > 0) { for (int i = 0; i < str.Text.Length; i++) if (str.Text[i].ToString() == ",") count++; if (count > 0 ) str.Clear(); } return; } else e.Handled = true; } private void txt_TextChanged(object sender, EventArgs e) { TextBox textBox = (TextBox)sender; if (textBox.Text.StartsWith(",")) textBox.Text = textBox.Text.Substring(1); } |
Таким образом мы рассмотрели два варианта из множества, как можно сделать контроль ввода пользователем в текстовое поле, и фильтровать ввод.