Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
 
Yekaterin@
1 / 1 / 2
Регистрация: 22.11.2010
Сообщений: 27
#1

Как запретить ввод букв в TextBox? - C#

18.05.2012, 19:10. Просмотров 43157. Ответов 47
Метки нет (Все метки)

Как запретить ввод букв в textBox? Вот эта конструкция неверно работает
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
 public void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            try 
            {
            char s = Convert.ToChar(textBox1.Text);
            if ((s <= '0') || (s >= '9'))
                MessageBox.Show("Вы ввели символ! Пожалуйста,введите цифру");
              }
                catch(System.FormatException)
            {
                MessageBox.Show("Вы ввели символ! Пожалуйста,введите цифрy");
                }
        }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2012, 19:10
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как запретить ввод букв в TextBox? (C#):

Как запретить ввод букв и символов в TextBox?
Как запретить ввод букв и символов в TextBox ? :scratch:

Запретить ввод букв в TextBox
private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { ...

Как запретить ввод символа в textbox?
Здравствуйте. Подскажите, пожалуйста, как в событии KeyPress прописать, чтобы...

Как запретить ввод данных в textBox ?
Собственно в заголовке и заключается весь вопрос. Я так понимаю это как то...

Как запретить ввод некоторых символов в TextBox?
По заданию в TextBox можно вводить числа только в двоичной системе счисления,...

Как запретить ввод нуля первым символом в TextBox?
Доброго времени суток, как запретить ввод нуля первым символом в TextBox?

47
emdroof
5 / 5 / 4
Регистрация: 11.04.2011
Сообщений: 88
18.05.2012, 19:34 #2
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
 private void textBox1_TextChanged(object sender, EventArgs e)
        {
            try
            {
                int s = Convert.ToInt32(textBox1.Text);
            }
            catch (System.FormatException)
            {
                MessageBox.Show("Вы ввели символ! Пожалуйста,введите цифрy");              
            }    
            textBox1.Clear();
    
        }
количество введенных символов будет зависеть от типа textbox
3
Yekaterin@
1 / 1 / 2
Регистрация: 22.11.2010
Сообщений: 27
18.05.2012, 19:45  [ТС] #3
теперь он не только на буквы ругается, но и когда числа ввожу
0
emdroof
5 / 5 / 4
Регистрация: 11.04.2011
Сообщений: 88
18.05.2012, 19:51 #4
ругаться не должен, у меня не ругается, а сколько чисел вводишь?потому что int имеет свои пределы
0
Yekaterin@
1 / 1 / 2
Регистрация: 22.11.2010
Сообщений: 27
18.05.2012, 19:54  [ТС] #5
все, я уже исправила, спасибо)
0
aleksnice
Заблокирован
18.05.2012, 20:18 #6
А как ты исправила? а то у меня такая же фигня щас, не дает ввести цифры(
0
Yekaterin@
1 / 1 / 2
Регистрация: 22.11.2010
Сообщений: 27
18.05.2012, 20:27  [ТС] #7
просто уберите
C#
1
textBox1.Clear();
0
Vega251
377 / 94 / 3
Регистрация: 07.09.2011
Сообщений: 518
Записей в блоге: 2
18.05.2012, 20:29 #8
Лучший ответ Сообщение было отмечено как решение

Решение

Ну что за изврат? Вот как гораздо проще поступить без всяких там исключений:
C#
1
2
3
4
5
6
7
void TextBox1KeyPress(object sender, KeyPressEventArgs e)
        {
            
            if (Char.IsDigit (e.KeyChar)) return;
            else
            e.Handled=true;
        }
5
Leksey
5 / 5 / 1
Регистрация: 14.03.2011
Сообщений: 55
28.08.2012, 15:33 #9
а как сделать , чтобы "." точку можно было вводить ??
0
Kazbek17
29 / 37 / 11
Регистрация: 06.02.2012
Сообщений: 146
28.08.2012, 15:58 #10
C#
1
2
3
4
5
6
        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
          if(Char.IsNumber(e.KeyChar) | (Char.IsPunctuation(e.KeyChar)))return;
          else
          e.Handled=true;
        }
Ну это не самый хороший способ!!!
1
SrgKord
43 / 25 / 2
Регистрация: 14.02.2013
Сообщений: 583
21.06.2013, 20:17 #11
А можно ли сделать так, что бы во всей форме (допустим, там десять полей) нельзя было вводить буквы? Т.е. что бы не создавать десять раз событие для каждого текстбокса, что бы в каждый одно и тоже прописать, а один раз где-то указать, что в этой форме, или в TabControl, или TableLayoutPanel допустимы только числовые значения. Можно?
0
Darty
0 / 0 / 0
Регистрация: 09.03.2013
Сообщений: 18
24.07.2013, 23:51 #12
Пишешь обработчик для textBox1.KeyPressed, а потом в свойствах остальных текстбоксов выбираешь его.
0
JustBear
6 / 6 / 0
Регистрация: 01.03.2013
Сообщений: 161
25.07.2013, 11:27 #13
Как вариант - вызывать код ниже, например, вот так textBox1_KeyPress(); и Все.

C#
1
2
3
4
5
6
7
8
9
  private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
            char ch = e.KeyChar; 
 
            if (!Char.IsDigit(ch) && ch != 8) //Если символ, введенный с клавы - не цифра (IsDigit),
            {
                e.Handled = true;// то событие не обрабатывается. ch!=8 (8 - это Backspace)
            }
        }
2
SrgKord
43 / 25 / 2
Регистрация: 14.02.2013
Сообщений: 583
25.07.2013, 12:04 #14
Darty,
Тоже не то, тоже требует многократного повторения. Хотя и проще.
0
Uurh
3 / 3 / 0
Регистрация: 06.06.2014
Сообщений: 94
07.10.2014, 22:48 #15
C#
1
2
3
4
5
private void IsDigit_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!Char.IsDigit(e.KeyChar) && e.KeyChar != 8)
                e.Handled = true;
        }
Вот самый короткий и простой способ, лучше не найдешь)
1
mvs87
9 / 9 / 7
Регистрация: 21.08.2013
Сообщений: 115
30.03.2015, 11:49 #16
Цифры + запятая + работающий BackSpace

C#
1
2
3
4
5
6
        private void TB_rez_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsNumber(e.KeyChar) | (e.KeyChar == Convert.ToChar(",")) | e.KeyChar == '\b') return;
            else
                e.Handled = true;
        }
4
eastsida
1 / 1 / 2
Регистрация: 22.12.2014
Сообщений: 159
21.05.2015, 18:50 #17
Присоединюсь с вопросом, а как запретить ввод русских символов(букв) ?
0
kolorotur
Эксперт .NET
9940 / 8328 / 2045
Регистрация: 17.09.2011
Сообщений: 14,340
21.05.2015, 19:13 #18
Лучший ответ Сообщение было отмечено tezaurismosis как решение

Решение

Цитата Сообщение от eastsida Посмотреть сообщение
а как запретить ввод русских символов(букв) ?
Обработка события KeyPress:
C#
1
2
char c = e.KeyChar;
e.Handled = c >= 'а' && c <= 'я' || c >= 'А' && c <= 'Я' || c == 'ё' || c == 'Ё';
2
BorisMar84
5 / 5 / 5
Регистрация: 01.03.2014
Сообщений: 79
23.08.2015, 01:35 #19
Доброго времени суток! К вопросу "Как для всех текстбоксов формы запретить ввод букв или цифр?" Проще всего сделать несколько классов потомков класса TextBox со своими ограничениями и потом использовать их во всех формах проекта.

Для текстбокса в котором только цифры: новый класс ClsDigitTextBox, в нем обработчик.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    public class ClsNumericTextBox : TextBox
    {
        private string lastText;
        private double value;
 
 
        public ClsNumericTextBox()
            : base()
        {
            lastText = "0";
            this.Text = "0";
            this.TextAlign = HorizontalAlignment.Right;
            this.TextChanged += new EventHandler(ClsNumericTextBox_TextChanged);
        }
 
        
        void ClsNumericTextBox_TextChanged(object sender, EventArgs e)
        {
            if (!double.TryParse(this.Text, out value)) this.Text = lastText;
            else lastText = this.Text;
        }
     }
Таким образом программируем на основе паттерна: все что связано с объектом программмируется в самом объекте. В форме остается код взаимодействия между объектами.
0
corbis
541 / 270 / 48
Регистрация: 03.04.2015
Сообщений: 926
26.08.2015, 18:38 #20
А можно при помощи регулярных выражений определить любой вариант.
Например, ввод только цифр:

C#
1
2
3
4
5
6
7
using System.Text.RegularExpressions;
 
        Regex rx = new Regex(@"\D", RegexOptions.IgnoreCase);
        private void TextBox1_TextChanged(object sender, TextChangedEventArgs e)
        {
            TextBox1.Text = rx.Replace(TextBox1.Text, "");
        }
0
26.08.2015, 18:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.08.2015, 18:38
Привет! Вот еще темы с решениями:

Как запретить ввод определенных символов в несколько TextBox, не программируя каждый по отдельности
Добрый день.. Подскажите пожалуйста, как можно создать, свойство, которые бы...

Запретить ручной ввод в TextBox
Мне нужно сделать так что-бы ввод любого текста или цифр в textBox1 можно было...

Запретить ввод с клавиатуры в TextBox
Что надо использовать чтобы при изменения выбранного iteam изменялось textBox1,...

Запретить ввод - в TextBox между цифр
Как зделать, что бы нельзя было вводить минус между цифр или ошибку выдавал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru