Форум программистов, компьютерный форум, киберфорум
Наши страницы

C# Windows Forms

Войти
Регистрация
Восстановить пароль
 
 
Yekaterin@
1 / 1 / 0
Регистрация: 22.11.2010
Сообщений: 27
#1

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

18.05.2012, 19:10. Просмотров 42920. Ответов 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? - C#
Как запретить ввод букв и символов в TextBox ? :scratch:

Запретить ввод букв в TextBox - C#
private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { if ((e.KeyChar &gt;= '0') &amp;&amp; (e.KeyChar &lt;= '9')) ...

Как запретить ввод символа в textbox? - C#
Здравствуйте. Подскажите, пожалуйста, как в событии KeyPress прописать, чтобы ввод символа &quot;;&quot; был невозможен Спасибо

Как запретить ввод некоторых символов в TextBox? - C#
По заданию в TextBox можно вводить числа только в двоичной системе счисления, т.е. только &quot;1&quot; и &quot;0&quot;. Помогите, пожалуйста, это осуществить....

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

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

47
Даценд
Модератор
Эксперт .NET
4039 / 3878 / 1955
Регистрация: 20.04.2015
Сообщений: 7,047
11.11.2015, 17:41 #31
Цитата Сообщение от _Faradey Посмотреть сообщение
то же самое
что именно: полный запрет ввода, запрет ввода букв, разрешение на ввод только определенных символов?
0
_Faradey
3 / 3 / 0
Регистрация: 13.10.2015
Сообщений: 405
11.11.2015, 17:52 #32
Для одного текстбокса на форме делаю так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private void tb_TextChanged(object sender, EventArgs e)
{
string tmp = tb.Text.Trim();
string outS = string.Empty;
bool z_1 = true;
if (tmp.Length > 1 && tmp[0] == '0' && tmp[1] !=',')
tmp = tmp.Substring(1);
foreach (char ch in tmp)
if (Char.IsDigit(ch)||(ch==',' && z_1))
{
outS += ch;
if(ch == ',')
z_1 = false;
}
tb.text = outS;
tb.SelectionStart = outS.Legth;
}
Как тоже самое сделать для нескольких (3-х) текстбоксов в динамической панели?
0
Даценд
Модератор
Эксперт .NET
4039 / 3878 / 1955
Регистрация: 20.04.2015
Сообщений: 7,047
11.11.2015, 18:02 #33
C#
1
2
Textbox tb = new TextBox(); //создание ТБ
tb.TextChanged += new EventHandler(tb_TextChanged); //привязка события к обработчику
Добавлено через 3 минуты
в обработчике получаете ссылку на текстбокс, запустивший событие:
C#
1
TextBox tbox=(sender as TextBox);
и работаете с этой ссылкой:
C#
1
string tmp = tbox.Text.Trim();
и т.б.
1
_Faradey
3 / 3 / 0
Регистрация: 13.10.2015
Сообщений: 405
11.11.2015, 18:21 #34
C#
1
tb.TextChanged += new EventHandler(tb_TextChanged);
Выдает ошибку
tb_TextChanged не сущ. в текущем контексте

Добавлено через 7 минут
динамически создаю текстбокс в панеле так:
C#
1
2
3
4
5
6
7
for(int j=0; j<3; j++)
{
TextBox tb = new TextBox();
tb.name = 'Tb_'+(j+1).ToString();
tb.Location = new Point(0, 25*j);
NewPanel.Controls.Add(tb);
}
0
Даценд
Модератор
Эксперт .NET
4039 / 3878 / 1955
Регистрация: 20.04.2015
Сообщений: 7,047
11.11.2015, 18:39 #35
Цитата Сообщение от _Faradey Посмотреть сообщение
Для одного текстбокса на форме делаю так:
C#
1
private void tb_TextChanged(object sender, EventArgs e)
и
Цитата Сообщение от _Faradey Посмотреть сообщение
Выдает ошибку
tb_TextChanged не сущ. в текущем контексте
как так?
0
Kazbek17
28 / 36 / 3
Регистрация: 06.02.2012
Сообщений: 144
11.11.2015, 18:56 #36
Цитата Сообщение от _Faradey Посмотреть сообщение
Как тоже самое сделать для нескольких (3-х) текстбоксов в динамической панели?
Так тебе же говорят, создай обработчик один, для всех своих TextBox-в
если ты создаешь массивом т.е
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
TextBox [] tx = new TextBox[5];
for(int Item =0; Item < 5; Item++)
{
  tx[item] = new TextBox();
  tx[item].KeyPress = tx_KeyPress;//Тут присваивается обработчик каждому созданному TextBox -у
}
 
//Тут сам обработчик событий, где при вводе в каком либо TextBox-е происходит событие.
private void tx_KeyPress(object sender, KeyPressEventArgs e)
{
 //тут пишешь что тебе вздумается!!!
}
не нравится KeyPress? замени на другой обработчик.
1
_Faradey
3 / 3 / 0
Регистрация: 13.10.2015
Сообщений: 405
13.11.2015, 11:23 #37
Прошу прощения, забыл сказать, что у меня создаются динамические панели в цикле for в этом цикле создаются textbox-ы в каждой панели циклом for,Наверное поэтому не добавляется обработчик событий. вот код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
namespace S_2
{
    public partial class F_1 : Form
    {
        private List<Panel> listPanel = new List<Panel>();
        public F_1()
        {
            InitializeComponent();            
        }
 
        private void Btn_Eval_Click(object sender, EventArgs e)
        {                        
            int Count = int.Parse(Tb_NPanel.Text);
            
            //Очищаем все панели
 
            foreach (Panel ctrl in listPanel)
                this.Controls.Remove(ctrl);
            listPanel.Clear();
 
            //Добавляем панели по заданному значению
 
            int x = 0, y = 0;
            for(int i=0; i<Count; i++)
            {
                Panel NewPanel = new Panel()
                {
                    Name = "panel" + i.ToString(),
                    BorderStyle = BorderStyle.FixedSingle,
                    Size = new Size(50, 300),
                    Location = new Point(x, y)
                };
                x += NewPanel.Width + 10;
                if (x>this.Width - NewPanel.Width - 20)
                {
                    x = 0;
                    y += NewPanel.Height + 10;
                }
 
                //Добавляем TextBox на панель
 
 
                for(int j=0; j<3; j++)
                {
                    TextBox textBox = new TextBox();
                    textBox.Name = "Tb_" + (j + 1).ToString();
                    textBox.Size = new Size(50, 0);
                    textBox.Location = new Point(0, 25 * j);
                    
                    NewPanel.Controls.Add(textBox);
                                                
                }
//Динамическая форма
 
                this.Width = Count * (NewPanel.Width + 10);
                this.Update();
 
                //
 
                this.Controls.Add(NewPanel);
                listPanel.Add(NewPanel);
            }
            
        }
}
0
corbis
541 / 270 / 47
Регистрация: 03.04.2015
Сообщений: 926
13.11.2015, 12:12 #38
При создании textBox'ов надо подцепить к каждому обработчик событий. Пока создается только имя, размеры и положение. А потом уже к обработчику обращаться.
0
_Faradey
3 / 3 / 0
Регистрация: 13.10.2015
Сообщений: 405
13.11.2015, 12:15 #39
Не подцепляется, я ж об этом написал сразу видит как ошибку
0
Даценд
Модератор
Эксперт .NET
4039 / 3878 / 1955
Регистрация: 20.04.2015
Сообщений: 7,047
13.11.2015, 12:35 #40
_Faradey,
C#
1
2
3
4
5
6
7
8
9
for(int j=0; j<3; j++)
{
    TextBox textBox = new TextBox();
    textBox.Name = "Tb_" + (j + 1).ToString();
    textBox.Size = new Size(50, 0);
    textBox.Location = new Point(0, 25 * j);
    textBox.TextChanged += new EventHandler(tb_TextChanged);   //вот здесь подписываете              
    NewPanel.Controls.Add(textBox);
}
Сам обработчик в этом же классе должен быть:
C#
1
2
3
4
private void tb_TextChanged(object sender, EventArgs e)
{
    //...
}
1
corbis
541 / 270 / 47
Регистрация: 03.04.2015
Сообщений: 926
13.11.2015, 13:28 #41
Даценд прав, однако.
0
_Faradey
3 / 3 / 0
Регистрация: 13.10.2015
Сообщений: 405
13.11.2015, 13:37 #42
Цитата Сообщение от Даценд Посмотреть сообщение
C#
1
2
3
4
private void tb_TextChanged(object sender, EventArgs e)
{
    //...
}
Как теперь сюда вставить сей код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
string tmp = tb.Text.Trim();
string outS = string.Empty;
bool z_1 = true;
if (tmp.Length > 1 && tmp[0] == '0' && tmp[1] !=',')
tmp = tmp.Substring(1);
foreach (char ch in tmp)
if (Char.IsDigit(ch)||(ch==',' && z_1))
{
outS += ch;
if(ch == ',')
z_1 = false;
}
tb.text = outS;
tb.SelectionStart = outS.Legth;
чтоб работал на всех textbox-ах динамических панелях...
при попытке ввести ссылку на textBox сразу подчеркивает (
0
Даценд
Модератор
Эксперт .NET
4039 / 3878 / 1955
Регистрация: 20.04.2015
Сообщений: 7,047
13.11.2015, 13:46 #43
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
_Faradey,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void tb_TextChanged(object sender, EventArgs e)
{
    TextBox tb = (sender as TextBox);
    string tmp = tb.Text.Trim();
    string outS = string.Empty;
    bool z_1 = true;
    if (tmp.Length > 1 && tmp[0] == '0' && tmp[1] !=',')
        tmp = tmp.Substring(1);
    foreach (char ch in tmp)
        if (Char.IsDigit(ch)||(ch==',' && z_1))
        {
            outS += ch;
            if(ch == ',')
            z_1 = false;
        }
    tb.text = outS;
    tb.SelectionStart = outS.Legth;
}
1
_Faradey
3 / 3 / 0
Регистрация: 13.10.2015
Сообщений: 405
13.11.2015, 14:14 #44
Цитата Сообщение от Даценд Посмотреть сообщение
TextBox tb = (sender as TextBox);
ОГРОМНОЕ СПАСИБО! Этой строчки как раз не хватало
0
corbis
541 / 270 / 47
Регистрация: 03.04.2015
Сообщений: 926
13.11.2015, 22:45 #45
или так:
TextBox tb = e.OriginalSource;
1
13.11.2015, 22:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.11.2015, 22:45
Привет! Вот еще темы с ответами:

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

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

Возможно ли за один подход запретить ввод букв во множество текстбоксов? - C#
Это такая теоретическая задача, не горит, но знать интересно. Можно ли вместо нескольких операций ввода однотипного кода в события...

Ввод в textbox только букв - C#
Добрый день! Как можно сделать, чтобы в поле textBox вводились только буквы и при этом первая буква всегда была заглавной(большой)??


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

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

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