Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 08.04.2010
Сообщений: 4
1

Обработчик кнопок

08.04.2010, 11:12. Показов 1696. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. столкнулся с проблемой, суть в том, что я создаю n кнопок в цикле, а как сделать для них разные обработчики не знаю? точнее разные в них только ID. буду крайне благодарен за помощь.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
            for (int i = 1; i < 3; i++)
            {
                myCommandqwe.CommandText = "SELECT x FROM city WHERE id =" + i.ToString();
                xs = myCommandqwe.ExecuteScalar().ToString();
                x = Convert.ToInt16(xs);
                myCommandqwe.CommandText = "SELECT y FROM city WHERE id =" + i.ToString();
                ys = myCommandqwe.ExecuteScalar().ToString();
                y = Convert.ToInt16(ys);
                Button b = new System.Windows.Forms.Button();
                b.Location = new System.Drawing.Point(x, y);
                b.Name = "Label" + i.ToString();
                b.Text = "Label" + i.ToString();
                b.ForeColor = System.Drawing.Color.Yellow;
                this.Controls.Add(b);
                pictureBox1.SendToBack();
                b.Click  += new System.EventHandler(this.bcl);
                
            }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.04.2010, 11:12
Ответы с готовыми решениями:

один обработчик нажатия для всех кнопок
На панель динамически добавляю какое-то количество кнопок ,с похожим функционалом. Есть один и тот...

Создать массив кнопок, для каждой кнопок будет одинаковый обработчик
Всем привет! Нужна помощь в реализации такой задачи. Нужно создать массив кнопок, для каждой...

Один обработчик на несколько кнопок
private void p7_Click(object sender, EventArgs e) { foreach (var...

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

7
1319 / 992 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
08.04.2010, 11:20 2
C#
1
2
3
4
5
6
            for (int i = 0; i < b.Length; i++) {
                int ii = i;
                b[i].Click += delegate(object _sender, EventArgs _e) {
                    MessageBox.Show("Кнопка №" + ii + "нажата");
                };
            }
1
1512 / 779 / 103
Регистрация: 22.04.2008
Сообщений: 1,610
08.04.2010, 11:20 3
Вам не надо делать обработчики для каждой кнопки, а сделайте один для всех только в нем используйте проверки какая кнопка нажата и в зависимости от этого и выполняете нужные действия
1
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
08.04.2010, 11:30 4
Если я верно понял, то надо разные обработчики событий вызывать в этом месте:
Цитата Сообщение от TwoSided Посмотреть сообщение
C#
1
b.Click  += new System.EventHandler(this.bcl);
Как вариант можна создать массив такого делегата:
C#
1
delegate void MyDel(object sender, EventArgs e);
Как-то так для трех кнопок:
C#
1
MyDel[] d = new MyDel[3];
А после присвоить нужные функции делегатам, например:
C#
1
2
for (int i = 0; i < 3; i++)
   d[i] = (a, b) => { MessageBox.Show(i.ToString()); };
И в итоге обработчик событий привязать так:
C#
1
b.Click  += this.d[i];
Надеюсь, все понятно?

Добавлено через 1 минуту
Цитата Сообщение от Sergei Посмотреть сообщение
Вам не надо делать обработчики для каждой кнопки, а сделайте один для всех только в нем используйте проверки какая кнопка нажата и в зависимости от этого и выполняете нужные действия
Неплохой вариант!
1
1319 / 992 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
09.04.2010, 12:55 5
Blood-Angel, проверь свой код и удивись, почему мессаджбокс всегда показывает число 3

-> замыкания <-

Добавлено через 4 минуты
Sergei, и в моем случае и в случае Blood-Angel создается только ОДИН обработчик события и потом цепляется. это несмотря на то, что даже объявление происходит в цикле. см. ту же ссылку
1
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
10.04.2010, 10:05 6
Цитата Сообщение от Mikant Посмотреть сообщение
Blood-Angel, проверь свой код и удивись, почему мессаджбокс всегда показывает число 3
Все просто:
C#
1
b.Click  += this.d[i];
Дело в том, что я присвоил все три делегата одной и той же кнопке - я видел код иначе.
Вот потому и выдает MessageBox всегда три.

Надо так:
C#
1
2
for (int i = 0; i < 3; i++)
   b[i].Click  += this.d[i];
0
Mikant
10.04.2010, 13:49
  #7

Не по теме:

Blood-Angel, а вот и нет. даже если ты присвоишь 3 разных делегата трем разным кнопкам все равно будет 3 выводиться. это интересный нюансег. вставь мой код в проект и закомменть int ii = i; увидишь что получится (ну остальные переименуй чтоль)

0
Злой няш
2136 / 1505 / 565
Регистрация: 05.04.2010
Сообщений: 2,881
11.04.2010, 17:18 8
Не по теме:
Mikant, действительно, будем знать.
0
11.04.2010, 17:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2010, 17:18
Помогаю со студенческими работами здесь

Обработчик событий для нескольких кнопок
Доброго времени суток! У меня есть toolStrip, и на нём есть кнопка, по нажатию этой кнопки,...

Обработчик событий динамически созданных кнопок
Уважаемые форумчане, помогите студентам! У нас есть функция, которая создает количество кнопок,...

Один обработчик на несколько кнопок с их идентификацией
Есть несколько Button-ов: button1, button2, button3, button4, button5 и метод Method(int n) ...

Обработчик события для программно созданных кнопок
Помогите пожалуйста! Есть программно создаваемые кнопки в количестве, зависящем от введенного в...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru