Всем привет! Сегодня я покажу один из вариантов того, как можно реализовать запрет на ввод информации.
Думаю многие из вас сталкивались с тем что в программах невозможен ввод в поле имени, часть символов состоящих из цифры, Такое встречается только в играх, но в реальности то мы знаем, что такого быть не должно. А само имя или фамилия должно исключительно состоять только из букв.
В примере ниже рассмотрим запрет ввода цифр в текстбокс и запретим пользователю ввод прописных букв. Пример очень простой и занимает всего пару строк кода.
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
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);
}
Таким образом мы рассмотрели два варианта из множества, как можно сделать контроль ввода пользователем в текстовое поле, и фильтровать ввод.
