Как запретить ввод цифр или букв в textBox C#

Всем привет! Сегодня я покажу один из вариантов того, как можно реализовать запрет на ввод информации.

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

В примере ниже рассмотрим запрет ввода цифр в текстбокс и запретим пользователю ввод прописных букв. Пример очень простой и занимает всего пару строк кода.

        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);
        }

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

Обновлено: 21.10.2021 — 15:39

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.