28 / 28 / 10
Регистрация: 10.03.2012
Сообщений: 249

Как подписать двести кнопок на одно событие

04.01.2013, 19:57. Показов 7834. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть 200 кнопок. Клик по каждой из них должен вызвать какой-то код, одинаковый для всех. Первое что пришло в голову - обратиться как-то к кнопкам как ячейкам двухмерного массива.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.01.2013, 19:57
Ответы с готовыми решениями:

Подписать на событие несколько кнопок в цикле
Как пройтись по всем кнопкам и поставить событие: private void buttons_MouseEnter(object sender, EventArgs e) { ...

Подписать несколько TextBox на одно событие
Чтобы вводить в текстбокс тока цифры, добавил процедуру private void textBox1_KeyPress(object sender, KeyPressEventArgs e) Но у меня на...

Подписать несколько RadioButton на одно событие
Здравствуйте форумчане!!! не подскажете можно ли для всех radiobutton объединить событие _CheckedChanged чтобы для каждого отдельно не...

33
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
06.01.2013, 09:31
Студворк — интернет-сервис помощи студентам
van Persie, не лучше, по-своему опыту говорю.

kravam, еще раз, автору по-заданию нужно вызвать один и тот же метод, по крайней мере он так сформулировал. Если ВАМ нужно обращаться к разным методам, то тогда в цикле вообще этого не получится сделать, только если методы не будут называться meth1, meth2... тогда способ есть
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
06.01.2013, 12:34
Я так понимаю, разговор о терминах щас пойдёт? Тогда поскольку я ставлю задачу, термины будут моими. Второй раз:
Цитата Сообщение от kravam Посмотреть сообщение
Я же предлагаю сделать именно чтобы разные функции вызывались, но с одинаковыми параметрами.
По нажатию на каждую кнопку. Названия произвольные.

Обращаю ваше внимание- по фиг что это будет- обработчики или ещё что. Лишь бы выполнялось условие.
Сделаем циклом без массива делегатов?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
06.01.2013, 20:21
kravam, а зачем тут цикл, если делегаты все равно придется потом заполнять
C#
1
2
3
4
del[0] = MyFunc1;
del[1] = MyOtherFunc2;
del[2] = AnotherFunc3;
...
или массив делегатов сам собой заполнится?
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
06.01.2013, 23:05
Цитата Сообщение от Psilon Посмотреть сообщение
kravam, а зачем тут цикл, если делегаты все равно придется потом заполнять
ну не знаю, мне так удобно писать:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
this.btn[i, j].Click += new System.EventHandler(this.button1_Click);
 
//+++++++++++++++++++++++++++
 
for (int i = 0; i < stolbtsi; i++)
                for (int j = 0; j < stroki; j++)
                {
                    if        (j % 4 == 0)
                        d__[i, j] = f_0;
                    else if   (j % 4 == 1)
                        d__[i, j] = f_1;
                    else if   (j % 4 == 2)
                        d__[i, j] = f_2;
                    else      
                        d__[i, j] = f_3;
                }
а кому-то
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
06.01.2013, 23:11
kravam, а если 200 функций будете 200 раз писать else if?
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
06.01.2013, 23:17
Если будет 200 функций и тысяча кнопок- то да 200 раз else if. Альтренатива- тысячу раз написать присвоение del[0] = MyFunc1;

Добавлено через 1 минуту
А если 200 функций и 200 кнопок то каждому делегату свою функцию (200 раз) и всё на этом
C#
1
2
3
del[0] = MyFunc1;
del[1] = MyOtherFunc2;
del[2] = AnotherFunc3;
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
06.01.2013, 23:41
kravam, тогда зачем нужны делегаты если можно то же самое делать с кнопками?
C#
1
2
3
4
button1.Click +=  MyFunc1;
button2.Click +=  MyOtherFunc2;
button3.Click +=  AnotherFunc3;
...
0
06.01.2013, 23:50

Не по теме:

Psilon, kravam, девочки не ссорьтесь) Думаю автор уже получил ответ

1
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
07.01.2013, 00:06
Да, но если функции имеют другой прототип, отличный от (object sender, EventArgs e) (но одинаковый меж собой), например просто (), тогда уже так изящно
+=
не сделать, нет разве?
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.01.2013, 00:10
kravam, функция от делегата отличается (в данном случае) только содержимым. Все, что допустимо по функции, вызываемой по делегату, допустимо при вызову напрямую и наоборот. Фактически вы просто плодите лишние ссылки на одно и то же. Это как иметь массив объектов из заводить массив указателей на какое-то поле этих объектов. Объекты и так уже есть, достаточно просто по имени обратиться в имени. Вы просто вводите псевдонимы функций за счет делегатов, но в этом мало смысла.
1
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
07.01.2013, 00:47
Я всё понимаю, кроме одного, почему у меня ВАШ вариант не компилится, вот это вот:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
            for (int i = 0; i < stolbtsi; i++)
                for (int j = 0; j < stroki; j++)
                {
                    if (j % 4 == 0)
                    {
                        d__[i, j] = f_0;
                        
//Дай-ка думаю минуя делегат-ссылку_аппендицитную добавлю в цепочку обработчиков
//функцию пробы ради, а не даёт компилятор!
this.btn[i, j].Click += f_0;
                    }
                    else if (j % 4 == 1)
                        d__[i, j] = f_1;
                    else if (j % 4 == 2)
                        d__[i, j] = f_2;
                    else
                        d__[i, j] = f_3;
                }
        }
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.01.2013, 00:59
Ну можно что-нибудь в таком духе
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
using System;
using System.Windows.Forms;
 
namespace WindowsFormsApplication8
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            const int size = 50, dx = 10, n = 5;
            for (int i = 0; i < n; i++)
            {
                var button = new Button { Width = size, Height = size, Top = i * (size + dx) + dx, Left = 10 };
                button.Click += new EventHandler(Meth(i));
                Controls.Add(button);
            }
            Height = (size + dx) * (n + 1);
            Width = size;
        }
 
 
        private Action<object,EventArgs> Meth(int i)
        {
            switch (i)
            {
                case 1:
                    return (o, e) => MessageBox.Show("Meth #1");
                case 2:
                    return (o, e) => MessageBox.Show("Meth #2");
                case 3:
                    return (o, e) => MessageBox.Show("Meth #3");
                case 4:
                    return (o, e) => MessageBox.Show("Meth #4");
            }
            return (o, e) => MessageBox.Show("Default Meth");
        }
    }
}
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
07.01.2013, 01:21
Ладно, как-нибудь изучу, всё равно у меня не получается компилить с моими функциями f_*
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
07.01.2013, 01:22
kravam, ну у меня запускается и даже работает Для удобства написал метод с вашими любимыми делегатами, который возвращает нужный метод в зависимости от индекса, хотя это тоже излишне, но пусть будет.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.01.2013, 01:22

Как на несколько кнопок повесить одно событие
Здравствуйте! У меня есть на форме аж 40 кнопок, но на какую бы ни нажал пользователь, код должен выполняться один и тот же. Не хотелось...

Подписать на одно событие множество элементов управления
Здравствуйте. На форме есть 5 PictureBox'ов. Необходимо сделать так, чтобы при нажатии на любой из них, он выбирал картинку из ресурсов....

Создать одно событие для нескольких кнопок
тема такая: пишу игру крестики-нолики. для всех кнопок событие одно и то же. можно как-то вызвать его в цикле или что-то типа того?

Как подписать кнопку на событие
есть коллекция кнопок List&lt;Button&gt; list_btn есть метод создающий несколько кнопок в этой коллекции private void btn_test(object sender,...

Как подписать компонент на событие
Не нашел в шушле нужной инфы по своему вопрос, можно ли повесить обработчик на форму (допустим клик ) и при клике на кнопку допустим...


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

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

Новые блоги и статьи
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru