Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
2 / 2 / 0
Регистрация: 26.10.2015
Сообщений: 104
1

Событие по клику на кнопке

30.09.2017, 16:26. Показов 2104. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
На форме есть MenuStrip создаваемый через код, нужно чтобы на каждую кнопку повесилось событие которое будет например выводить сообщение что нажата эта кнопка, как это реализовать? То есть грубо говоря нужно сделать ссыль на кнопку, а вот это уже сложно и непонятно...
Кнопки создаются так:
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
string[] categ = new string[dataGridView2.Rows.Count];
            string[,] goods = new string[dataGridView2.Rows.Count,3];
            for (int i = 0; i < dataGridView2.Rows.Count; i++)
            {
                categ[i] = Convert.ToString(dataGridView2.Rows[i].Cells[3].Value);
                goods[i, 0] = Convert.ToString(dataGridView2.Rows[i].Cells[1].Value);
                goods[i, 1] = Convert.ToString(dataGridView2.Rows[i].Cells[2].Value);
                goods[i, 2] = Convert.ToString(dataGridView2.Rows[i].Cells[3].Value);
            }
            IEnumerable<string> cat = categ.Distinct();
 
            ToolStripDropDownButton tsd = new ToolStripDropDownButton("Меню");
            foreach (string c in cat)
            {
                ToolStripDropDownButton ts = new ToolStripDropDownButton(c);
                ts.DropDownDirection = ToolStripDropDownDirection.Right;
                ts.Width = 100;
                for (int i = 0; i < goods.Length / 3; i++)
                {
                    if (c == goods[i, 2])
                    {
                        ts.DropDownItems.Add(goods[i, 0], null, ClickHandler); //Вот здесь есть событие но не знаю как сослаться например на Text нажатой кнопки
                    }
                }
                tsd.DropDownItems.Add(ts);                
            }
            this.menuStrip1.Items.Add(tsd);
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.09.2017, 16:26
Ответы с готовыми решениями:

Php+Html!? как кнопке определить в событие по клику фун-цию php!? синтаксис любой пример приведите
по клику на кнопке обычной а вообще мне надо стереть один файл просто по клику, вот сижу и думаю...

Вывод сообщения по клику на кнопке
На форме имеются кнопки «Форматировать», «Удалить», «Очистить». Для каждой кнопки предусмотреть...

Как убрать таблицу по клику на кнопке?
Здравствуйте! Рылся в нете, но так ничего не нашел. &lt;div&gt; &lt;asp:Panel...

Redux создание элемента по клику на кнопке
Нужно сделать так, чтобы при клике на кнопку New создавалось самым верхним новое пустое поле для...

9
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
30.09.2017, 21:41 2
Лучший ответ Сообщение было отмечено Nakato как решение

Решение

Как-то так:
C#
1
2
3
4
5
6
7
8
9
10
11
{
    ToolStripDropDownButton ts = new ToolStripDropDownButton(c);
    ts.DropDownItemClicked += ts_DropDownItemClicked;
    //...
}
//...
void ts_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
    string text = e.ClickedItem.Text;
    MessageBox.Show(text);
}
1
2 / 2 / 0
Регистрация: 26.10.2015
Сообщений: 104
01.10.2017, 12:00  [ТС] 3
Спасибо, а есть возможность добавить лишь одно событие? Прост при проверке получается так что несколько раз выводится одно и то же сообщение
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
01.10.2017, 12:30 4
Nakato,
Проверил код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void Form1_Load(object sender, EventArgs e)
{
    List<string> list = new List<string>() { "111", "222", "333" };
    ToolStripDropDownButton ts = new ToolStripDropDownButton("Выбор");
    ts.DropDownItemClicked += new ToolStripItemClickedEventHandler(ts_DropDownItemClicked);
    menuStrip1.Items.Add(ts);
    foreach (string str in list)
    {
        ToolStripItem tdi = new ToolStripButton(str);
        ts.DropDownItems.Add(tdi);
    }
}
 
void ts_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
    string text = e.ClickedItem.Text;
    MessageBox.Show(text);
}
Обработчик срабатывает 1 раз при щелчке по итему.
0
2 / 2 / 0
Регистрация: 26.10.2015
Сообщений: 104
01.10.2017, 13:50  [ТС] 5
Просто когда я вывожу в консоль то что у меня написано на кнопке, в консоль выводится то, что написано, но несколько раз подряд в зависимости от того сколько раз до этого он прошелся по циклу

Добавлено через 1 минуту
Вы меня не совсем правильно поняли, у меня выводится кнопка меню в которой находятся еще категории, в которых, в свою очередь и находятся сами так скажем button'ы
0
2 / 2 / 0
Регистрация: 26.10.2015
Сообщений: 104
01.10.2017, 13:52  [ТС] 6
Вот так примерно это выглядит
Миниатюры
Событие по клику на кнопке  
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
01.10.2017, 13:54 7
Nakato,
Обратите внимание, что обработчик нужно подписывать к событию один раз.
Т.е. строка:
C#
5
ts.DropDownItemClicked += new ToolStripItemClickedEventHandler(ts_DropDownItemClicked);
не должна быть в цикле, создающем подитемы для ts.
Хотя лучше покажите нынешнее состояние кода.
0
2 / 2 / 0
Регистрация: 26.10.2015
Сообщений: 104
01.10.2017, 14:02  [ТС] 8
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
private void t_Load(object sender, EventArgs e)
        {
            this.goodsTableAdapter.Fill(this.dBDataSet.Goods);
            this.tablesTableAdapter.Fill1(this.dBDataSet._Tables);
 
            this.dataGridView1.Columns[0].Visible = false;
            this.dataGridView1.Columns[4].Visible = false;
            this.dataGridView1.Columns[5].Visible = false;
            this.dataGridView1.Columns[6].Visible = false;
            this.dataGridView1.Columns[7].Visible = false;
            this.dataGridView2.Visible = false;
 
            string[] categ = new string[dataGridView2.Rows.Count];
            string[,] goods = new string[dataGridView2.Rows.Count, 3];
            for (int i = 0; i < dataGridView2.Rows.Count; i++)
            {
                categ[i] = Convert.ToString(dataGridView2.Rows[i].Cells[3].Value);
                goods[i, 0] = Convert.ToString(dataGridView2.Rows[i].Cells[1].Value);
                goods[i, 1] = Convert.ToString(dataGridView2.Rows[i].Cells[2].Value);
                goods[i, 2] = Convert.ToString(dataGridView2.Rows[i].Cells[3].Value);
            }
            IEnumerable<string> cat = categ.Distinct();
            cat = cat.Where(x => x != null).ToArray();
 
            ToolStripDropDownButton tsd = new ToolStripDropDownButton("Меню");
            foreach (string c in cat)
            {
                ToolStripDropDownButton ts = new ToolStripDropDownButton(c);
                ts.DropDownDirection = ToolStripDropDownDirection.Right;
                ts.Width = 200;
                for (int i = 0; i < goods.Length / 3; i++)
                {
                    if (c == goods[i, 2])
                    {
                        ts.DropDownItems.Add(goods[i, 0]+' ');
                        ts.DropDownItemClicked += ClickHandler;//Вот для к этим кнопкам мне нужно приклеить событие
                    }
                }
                tsd.DropDownItems.Add(ts);
            }
            this.menuStrip1.Items.Add(tsd);
        }
0
Эксперт .NET
5871 / 4748 / 2940
Регистрация: 20.04.2015
Сообщений: 8,361
01.10.2017, 14:14 9
Лучший ответ Сообщение было отмечено Nakato как решение

Решение

Nakato,
Строку 36 вынесите из цикла for и поставьте сразу после 28-й.
1
2 / 2 / 0
Регистрация: 26.10.2015
Сообщений: 104
01.10.2017, 14:23  [ТС] 10
Спасибо, что-то протупил
0
01.10.2017, 14:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.10.2017, 14:23
Помогаю со студенческими работами здесь

открытие фрейма по клику по ссылке-кнопке
Всем привет.. есть такой код фрейма.. нужно повесить его открытие по ссылке - кнопке. код фрейма...

Изменить класс ячейки таблицы по клику на кнопке
Ппомогите пожалуста ничинающему по джава скриптам:) задача такая: на странице стоит большая...

Как на форме по клику на кнопке запустить таймер?
Помогите, пожалуйста. Как на форме по клику на кнопке запустить таймер. Форма должна оставаться...

как отправить юзера по ссылке при клику по кнопке
MS visual studio, как отправить юзера по ссылке при клику по кнопке


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

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