Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как сделать запрет на ввод в textbox букв? 
:(
    Опции темы
solnushko
Дата 18.5.2007, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 18.5.2007

Репутация: нет
Всего: нет



Подскажите плиз!!! Как мне сделать в C# ограничение на ввод букв в textbox??? Просто в моей программе 12 textboxов и в них можно вводить только цифры!
PM MAIL   Вверх
Ch0bits
Дата 19.5.2007, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: 1
Всего: 62



Перехватываешь 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;
        }

PM WWW   Вверх
Сарт
Дата 19.5.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 159
Регистрация: 29.4.2006

Репутация: нет
Всего: 0



Для запрещения ввода в 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)

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

--------------------
[color=purple][/color]Died.Of course, System.StackOverflow 
PM MAIL   Вверх
KuZyagroup
Дата 19.5.2007, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


magento solution
**


Профиль
Группа: Участник
Сообщений: 283
Регистрация: 16.4.2007
Где: Kiev

Репутация: нет
Всего: 4



Все гораздо проще.
Юзай MaskedTextBox c Маской из "0".
MaskedTextBox - спецальный контрл который создан для ограничения ввода в текст бокс
PM MAIL   Вверх
AKRAS
Дата 6.6.2012, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 12.3.2008

Репутация: нет
Всего: нет



А Как сделать что бы выводилось сообщение, для пользователя...что нужно вводить цифры??
PM MAIL   Вверх
neic
Дата 12.6.2012, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 839
Регистрация: 28.1.2007

Репутация: нет
Всего: 7



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("Ололо ошибка");
                }
            }
        }

PM MAIL WWW ICQ Skype   Вверх
erm0l0v
Дата 14.6.2012, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 157
Регистрация: 11.1.2011

Репутация: нет
Всего: 1



как мне кажется:
Код

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


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

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

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

Не знаю есть ли в WF автоматический механизм реализации Validate Error. Но в любом случае такое поведение не сложно реализовать. Например положить контрол в Border и менять цвет Bordera в зависимости от валидности сообщения.
PM MAIL   Вверх
oleg_in62
Дата 20.6.2012, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 5.3.2008

Репутация: нет
Всего: нет



вместо 
Код

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


лучше использовать errorProvider.SetError(control, "Ололо ошибка" ), тогда возле указанного контрола появится красный кружок с восклицательным знаком, при наведении на который, будет отображаться "Ололо ошибка", а чтобы кружок исчез сделать errorProvider.SetError(control, "" ). Один errorProvider можно использовать для всех текстбоксов,  в этом случае можно разрешить ввод любых символов  и отображать предупреждение, когда вводятся буквы и убирать когда текст изменяется на правильный. 
PM MAIL   Вверх
Ыумук
Дата 19.11.2014, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 19.11.2014

Репутация: нет
Всего: нет



Цитата(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'ов, необходимо, чтоб во всех появилось ограничение по вводимым в них символам.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0679 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.