Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/37: Рейтинг темы: голосов - 37, средняя оценка - 4.86
28 / 28 / 10
Регистрация: 10.03.2012
Сообщений: 249

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

04.01.2013, 19:57. Показов 7822. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru