Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
278 / 223 / 33
Регистрация: 09.02.2011
Сообщений: 435
1

Массовая обработка событий в нескольких TextBox

25.02.2011, 13:38. Просмотров 3807. Ответов 4
Метки нет (Все метки)

Создаю 10 текстовых полей и на каждое поле нужно навесить обработку события Validating. Можно на все поля навесить одну обаботку?
C#
1
2
3
4
5
6
7
8
9
              for (int i = 0; i <10; i++)
              {
                  TextBox TextB = new TextBox();
                  TextB.Name = "TextB" + Convert.ToString(i + 1); 
                  TextB.Parent = this.ManagementFeePanel;
                  TextB.Location = new Point(40 + CheckB.Size.Width +30, 210 + 30 * i); 
                  TextB.Enabled = true;
                  TextB.Validating += new TextBValidating(TextB); // здесь не правильно
              }
Обрабатывать вводимые данные таким способом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        private void TextBValidating(TextBox TextB)
        {
            try
            {
                if (TextB.Text != "")
                {
                    float price = float.Parse(TextB.Text);
                }
                // Выводим, что нет ошибок
                _errorProvider1.SetError(TextB, "");
 
            }
            catch
            {
                // Иначе выводим ошибку
                _errorProvider1.SetError(TextB, "Не допустимые символы!");
            }
        }
Или может у кого-то есть другая идея!

Добавлено через 36 минут
Никто не знает, как сделать? Или так вообще нельзя сделать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.02.2011, 13:38
Ответы с готовыми решениями:

Обработка событий TextBox
Привет. Допустим у меня есть несколько TextBox'ов. Мне нужно проверить вводимые данные. Правила...

Обработка событий в элементе управления textbox
Здравствуйте, помогите пожалуйста(лучше кодом, или примером) по такому вопросу: имеется на форме...

Обработка событий для динамически создаваемых Textbox
Доброго времени суток! По нажатию на кнопку внутри Меню создаю новые вкладки TabPage для...

Обработка нескольких событий одного компонента в общем методе
Приветствую, форумчан! Помогите решить проблему: Есть ListBox, в нем по событию DrawItem...

4
387 / 302 / 67
Регистрация: 10.07.2010
Сообщений: 796
25.02.2011, 13:52 2
да, разумеется можно.
C#
1
TextB.Validating+=new CancelEventHandler(TextBValidating);
Добавлено через 3 минуты
а т.е в скобках пишется название события, а не объект вызывающий его.
И еще. когда вы написали TextB.Validating+= можно нажать на Tab и он сам допишет код.

Добавлено через 5 минут
и кастати еще кое что
C#
1
private void TextBValidating(object sender, CancelEventArgs e)
А что бы обратится к объекту который вызвал метод надо делать так:
C#
1
((TextBox)sender).Text=...
1
278 / 223 / 33
Регистрация: 09.02.2011
Сообщений: 435
25.02.2011, 14:12  [ТС] 3
Ошибка:The best overloaded method match for 'System.Windows.Forms.ErrorPro vider.SetError(System.Windows. Forms.Control, string)' has some invalid arguments

Вот вся конструкция! Где бок?
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
   public partial class newCertificateForm: Form
    {
        private readonly ErrorProvider _errorProvider1;
 
        public newCertificateForm()
        {
            InitializeComponent();
            // Создаём объект для отображения сообщений об ошибках
            // и передаём в него ссылку на данную форму.
            _errorProvider1 = new ErrorProvider(this);
        }
 
        private void CertificateDateTimePicker_Leave(object sender, EventArgs e)
        {
              for (int i = 0; i <10; i++)
              {
                  TextBox TextB = new TextBox();
                  TextB.Name = "TextB" + Convert.ToString(i + 1); 
                  TextB.Parent = this.ManagementFeePanel;
                  TextB.Location = new Point(40 + CheckB.Size.Width +30, 210 + 30 * i); 
                  TextB.Enabled = true;
                  TextB.Validating += new CancelEventHandler(TextBValidating);
              }
 
        }
 
//-------------------------Проверка коректности введенной суммы в управленческих взносах
        private void TextBValidating(object sender, CancelEventArgs e)
 
        {
            TextBox TB = new TextBox();
            TB = (TextBox)sender;
            try
            {
                if (TB.Text != "")
                {
                    float price = float.Parse(TB.Text);
                }
                // Выводим, что нет ошибок
                _errorProvider1.SetError(TB.Text, "");  //здесь ошибка
 
            }
            catch
            {
                // Иначе выводим ошибку
                _errorProvider1.SetError(TB.Text, "Не допустимые символы!");
            }
        }
   }
0
387 / 302 / 67
Регистрация: 10.07.2010
Сообщений: 796
25.02.2011, 14:34 4
Вместо
C#
1
_errorProvider1.SetError(TB.Text, "");
надо
C#
1
2
3
_errorProvider1.SetError(TB, "sdgedg");
или
_errorProvider1.SetError(this, "sdgedg");
Я точно не знаю как именно надо написать потому что никогда не имел дела с ErrorProvider. Да и вообще собственно без понятия что это). Так что я был бы не прочь что бы мне объяснили.
1
278 / 223 / 33
Регистрация: 09.02.2011
Сообщений: 435
25.02.2011, 15:54  [ТС] 5
Мне самому ссылку скинули на этот пример.
Если в текстбоксе PriceTextBox ввести символ, и покинуть его, то рядом с полем будет мигать красный кражок и наведя на него мышью высвечивается сообщение "Не допустимые символы!"

Вот так отработает на 100%
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
   public partial class newCertificateForm: Form
    {
        private readonly ErrorProvider _errorProvider1;
 
        public newCertificateForm()
        {
            InitializeComponent();
            // Создаём объект для отображения сообщений об ошибках
            // и передаём в него ссылку на данную форму.
            _errorProvider1 = new ErrorProvider(this);
            PriceTextBox.Validating += PriceTextBoxValidating;
        }
 
 
 
        private void PriceTextBoxValidating(object sender, CancelEventArgs cancelEventArgs)
        {
            try
            {
                if (PriceTextBox.Text != "")
                {
                    float price = float.Parse(PriceTextBox.Text);
                }
                // Выводим, что нет ошибок
                _errorProvider1.SetError(PriceTextBox, "");
 
            }
            catch 
            {
                // Иначе выводим ошибку
                _errorProvider1.SetError(PriceTextBox, "Не допустимые символы!");
            }
        }
Придется и мне разбираться с ErrorProvider. Спасибо за подсказки!

Добавлено через 34 минуты
(Visual C#, Visual C++) Добавьте в конструктор формы следующий код, чтобы зарегистрировать обработчик событий.
this.textBox1.Validating += new
System.ComponentModel.CancelEv entHandler(this.textBox1_Valid ating);

А я регистрирую не в конструкторе формы! Хотя за это молчит! В переметрах SetError() нужно указать компонент на форме, а его же фактически нет, он появится по ходу выполнения кода. Наверное так обработать не получится!

Добавлено через 31 минуту
Всё работает, это руки не от туда растут) Зато разобрался с ErrorProvider! Спасибо за помощь!
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.02.2011, 15:54

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

Обработка KeyPress для нескольких TextBox C++
на форме имеется множество текстбоксов, я написал проверку на ввод только чисел, привязал к...

Обработка KeyPress для нескольких TextBox
на форме имеется множество текстбоксов, я написал проверку на ввод только вещественных чисел,...

Обработка нескольких событий одной процедурой
Здравствуйте... Не могу понять тему, указанную в заголовке..Сейчас читаю Зиборова.. И там есть...

Массовая обработка контроллов
Здравствуйте. На форме есть несколько контролов, допустим, textbox'ы. Обнулить их все...


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

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

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