Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 09.07.2010
Сообщений: 6
1

Eventhandler для динамически создаваемых контроллов

16.01.2011, 16:56. Просмотров 1381. Ответов 4
Метки нет (Все метки)

Вопрос в том, как указать свой (индивидуальный) метод для каждого динамического контролла?
C#
1
2
3
4
5
6
7
8
9
10
            for (z = 0; z < 10; z++)
            {
                btn[z] = new Button();
                btn[z].Parent = this;
                btn[z].Bounds = new Rectangle(50, 50 + 22 * z, 500, 20);
                btn[z].Text = "Hi " + Convert.ToString(z);
                btn[z].Name="button"+Convert.ToString(z);
                btn[z].Click = new EventHandler(***);//Необходимо, чтобы для каждой кнопки своё событие типа btn1_Click, btn2_Click;
                Controls.Add(btn[z]);
            }
Спасибо =)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.01.2011, 16:56
Ответы с готовыми решениями:

Обработчик событий для динамически созданных контроллов
Всем привет, я столкнулся с этой проблемой, два дня назад, и до сих пор никак не могу решить эту...

Событие CheckedChanged для динамически создаваемых Radiobutton
Уважаемые форумчане, подскажите как определить событие CheckedChanged для динамически создаваемых...

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

Позиционирование динамически создаваемых GroupBox
У меня програмно создается гроуп бокс. Но их создается несколько. Вот такой вот функцией. ...

4
128 / 128 / 29
Регистрация: 17.09.2010
Сообщений: 288
16.01.2011, 17:40 2
Kirsane, попробуйте так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void buttonEvents()
        {
            for (int i = 0; i < 5; i++)
            {
                int x = i / 2;
                Button b = new Button();
                b.Name = Convert.ToString(i);
                b.Location = new Point(this.Left * x, 300);
                b.Text = Convert.ToString(i);
                this.Controls.Add(b);
                b.Click += new EventHandler(b_Click);
            }
        }
 
        public void b_Click(object sender, EventArgs e)
        {
            Button b2 = sender as Button;
 
            MessageBox.Show(b2.Name);
        }
Правда, чего то не выходит их разместить нормально.
0
0 / 0 / 0
Регистрация: 09.07.2010
Сообщений: 6
16.01.2011, 18:54  [ТС] 3
К сожалению, мне нужна именно работа с массивом контроллов, а данный вариант подходит как раз для создания по одному.
При попытке перенести данный способ на массив получается ошибка (если верно понимаю, ему уже очень сильно не нравится создания массива методов )
0
128 / 128 / 29
Регистрация: 17.09.2010
Сообщений: 288
16.01.2011, 19:11 4
Kirsane, в данном случае метод:
C#
1
2
3
4
5
6
public void b_Click(object sender, EventArgs e)
        {
            Button b2 = sender as Button;
 
            MessageBox.Show(b2.Name);
        }
связан со всеми пятью кнопками. Можно узнать какая кнопка была нажата и выполнить какое то действие:
C#
1
2
3
4
5
6
7
8
9
public void b_Click(object sender, EventArgs e)
        {
            Button b2 = sender as Button;
 
            if (b2.Name == "1")
            {
                // Выполняем какое то действие.
            }
        }
Можно использовать список, чтобы назвать нормально кнопки:
C#
1
2
3
4
List<string> buttonsNames = new List<string>
        {
            "Первая кнопка", "Вторая кнопка", "Третья кнопка", "Четвертая кнопка", "Пятая кнопка"
        };
C#
1
b.Name = buttonsNames[i];
0
Заблокирован
17.01.2011, 16:58 5
так попробуйте
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
        Button[] b;//массив кнопок
        int n = 5;//количество кнопок
        Program()//конструктор формы
        {
            b = new Button[n];//выделяем память под массив
            for (int i = 0; i < n; i++)
            {
                b[i] = new Button();//выделяем память под каждую кнопку
                b[i].Parent = this;
                b[i].Bounds = new Rectangle(10, 30 * i, 80, 30);
                b[i].Text = "Button" + i.ToString();
                b[i].Name = i.ToString();
                b[i].Tag = i;
                b[i].Click += new EventHandler(b_Click);
                //...   
            }
        }
        void b_Click(object sender, EventArgs e)
        {
            Button bt = (Button)sender;
            switch (bt.Name)//или bt.Text или bt.Tag
            {
                case "0": MessageBox.Show(bt.Text); break;
                case "1": MessageBox.Show(bt.Tag.ToString()); break;
                default: MessageBox.Show("other button - " + bt.Name); break;
            }
        }
как указать свой (индивидуальный) метод для каждого динамического контролла?
или в обработчике через switch
или за пределами цикла инициализации подписать каждую кнопку на свой
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.01.2011, 16:58

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

Название создаваемых динамически событий кнопок
Здравствуйте, я пишу сапера на C# Я создаю все кнопки динамически с помощью 2х циклов ...

Подписка на события динамически создаваемых элементов
При нажатии на кнопку на форму добавляются PictureBox-ы. Как описать для них событие Click?...

Взаимодействие динамически создаваемых Combobox и Button
Доброе время суток, товарищи. Создаю новую форму. Создаю на ней 2 элемента combobox и button (на...

Сериализация динамически создаваемых объектов с последующей десериализацией
Господа! Помогите мне придумать как сохранить динамически создаваемые объекты на форме. Как я...


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

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

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