Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка Windows Forms > Как сделать запрет на ввод в textbox букв?


Автор: solnushko 18.5.2007, 23:34
Подскажите плиз!!! Как мне сделать в C# ограничение на ввод букв в textbox??? Просто в моей программе 12 textboxов и в них можно вводить только цифры!

Автор: Ch0bits 19.5.2007, 01:44
Перехватываешь OnKeyDown у своих текстбоксов. Что-то типа этого:
Код

        // Фильтрация вводимых с клавиатуры клавиш
        private void OnKeyDown(object sender, KeyEventArgs e)
        {
            e.SuppressKeyPress = true; 
            // Пропускаем цифровые кнопки
            if ((e.KeyCode >= Keys.D0) && (e.KeyCode <= Keys.D9)) e.SuppressKeyPress = false;
            // Пропускаем цифровые кнопки с NumPad'а
            if ((e.KeyCode >= Keys.NumPad0) && (e.KeyCode <= Keys.NumPad9)) e.SuppressKeyPress = false;
            // Пропускаем Delete, Back, Left и Right
            if ((e.KeyCode == Keys.Delete) || (e.KeyCode == Keys.Back) ||
                (e.KeyCode == Keys.Left) || (e.KeyCode == Keys.Right)) e.SuppressKeyPress = false;
        }

Автор: Сарт 19.5.2007, 15:00
Для запрещения ввода в textbox любых даннных кроме цифр мы должны в обработчике KeyPress для textbox'а присвоить свойству Handled передаваемого параметра типа System.Windows.Forms.KeyPressEventArgs значение true.

Вот пример кода:

     
Код

   private void textBox1_KeyPress(object sender,
System.Windows.Forms.KeyPressEventArgs e)
        {
            // Если это не цифра.
            if(!Char.IsDigit(e.KeyChar))
            {
                // Запрет на ввод более одной десятичной точки.
                if(e.KeyChar != '.' || textBox1.Text.IndexOf(".") != -1)
                {
                    e.Handled = true;
                }
            }
        }
Строка


...
Код

if(e.KeyChar != '.' || textBox1.Text.IndexOf(".") != -1)

...
тут нужна для того, чтобы разрешить ввод десятичного разделителя (точки в данном случае) - причем только одного: если десятичный разделитель уже существует, то вводить второй заперщено.

Автор: KuZyagroup 19.5.2007, 16:35
Все гораздо проще.
Юзай MaskedTextBox c Маской из "0".
MaskedTextBox - спецальный контрл который создан для ограничения ввода в текст бокс

Автор: AKRAS 6.6.2012, 21:23
А Как сделать что бы выводилось сообщение, для пользователя...что нужно вводить цифры??

Автор: neic 12.6.2012, 01:57
AKRAS
А в чём проблема?

Код

private void textBox1_KeyPress(object sender,
System.Windows.Forms.KeyPressEventArgs e)
        {
            // Если это не цифра.
            if(!Char.IsDigit(e.KeyChar))
            {
                // Запрет на ввод более одной десятичной точки.
                if(e.KeyChar != '.' || textBox1.Text.IndexOf(".") != -1)
                {
                    e.Handled = true;
                    MessageBox.Show("Ололо ошибка");
                }
            }
        }

Автор: erm0l0v 14.6.2012, 09:58
как мне кажется:
Код

MessageBox.Show("Ололо ошибка");


не самый лучший вариант, представите что вы пишете какой текст в поле ввода, долго пишете и как обычно смотрите только на клавиатуру, а потом поднимаете глаза и видите что из-за ололо ошибки ваш ввод закончился на первых двух символах. Думаю вы будете мягко говоря недовольны.

Можно просто запрещать ввод "неправильных" символов и где нибудь написать какие символы можно вводить например сверху над полем ввода или в всплывающей подсказке.

Или можно разрешать вводить все символы, и одновременно проверять валидность данных, и в случае присутствия "неверных" символов подсвечивать поле красным или как то еще сигнализировать о не правильном вводе.

Не знаю есть ли в WF автоматический механизм реализации Validate Error. Но в любом случае такое поведение не сложно реализовать. Например положить контрол в Border и менять цвет Bordera в зависимости от валидности сообщения.

Автор: oleg_in62 20.6.2012, 17:01
вместо 
Код

MessageBox.Show("Ололо ошибка");


лучше использовать errorProvider.SetError(control, "Ололо ошибка" ), тогда возле указанного контрола появится красный кружок с восклицательным знаком, при наведении на который, будет отображаться "Ололо ошибка", а чтобы кружок исчез сделать errorProvider.SetError(control, "" ). Один errorProvider можно использовать для всех текстбоксов,  в этом случае можно разрешить ввод любых символов  и отображать предупреждение, когда вводятся буквы и убирать когда текст изменяется на правильный. 

Автор: Ыумук 19.11.2014, 10:41
Цитата(Ch0bits @ 19.5.2007,  01:44)
Перехватываешь OnKeyDown у своих текстбоксов. Что-то типа этого:
Код

        // Фильтрация вводимых с клавиатуры клавиш
        private void OnKeyDown(object sender, KeyEventArgs e)
        {
            e.SuppressKeyPress = true; 
            // Пропускаем цифровые кнопки
            if ((e.KeyCode >= Keys.D0) && (e.KeyCode <= Keys.D9)) e.SuppressKeyPress = false;
            // Пропускаем цифровые кнопки с NumPad'а
            if ((e.KeyCode >= Keys.NumPad0) && (e.KeyCode <= Keys.NumPad9)) e.SuppressKeyPress = false;
            // Пропускаем Delete, Back, Left и Right
            if ((e.KeyCode == Keys.Delete) || (e.KeyCode == Keys.Back) ||
                (e.KeyCode == Keys.Left) || (e.KeyCode == Keys.Right)) e.SuppressKeyPress = false;
        }

Подскажите пожалуйста, а куда этот код ставить? У меня в программе несколько textBox'ов, необходимо, чтоб во всех появилось ограничение по вводимым в них символам.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)