Мне нужно динамически создать 5 кнопок в форме окна, и каждая кнопка должна реагировать на событие щелчка. Я пробовал, но все кнопки реагируют на одно и то же событие.
Как создать 5 кнопок и динамически назначать отдельные события кликов?
comment
Покажите нам, что вы уже пробовали.
- person dtb   schedule 16.09.2009
comment
Кнопки не реагируют на события.
- person Henk Holterman   schedule 16.09.2009
Ответы (4)
Это то, о чем говорит Ник, это ваши два варианта (вы должны иметь возможность запустить этот код и увидеть оба варианта):
public Form1()
{
InitializeComponent();
for (int i = 0; i < 5; i++)
{
Button button = new Button();
button.Location = new Point(20, 30 * i + 10);
switch (i)
{
case 0:
button.Click += new EventHandler(ButtonClick);
break;
case 1:
button.Click += new EventHandler(ButtonClick2);
break;
//...
}
this.Controls.Add(button);
}
for (int i = 0; i < 5; i++)
{
Button button = new Button();
button.Location = new Point(160, 30 * i + 10);
button.Click += new EventHandler(ButtonClickOneEvent);
button.Tag = i;
this.Controls.Add(button);
}
}
void ButtonClick(object sender, EventArgs e)
{
// First Button Clicked
}
void ButtonClick2(object sender, EventArgs e)
{
// Second Button Clicked
}
void ButtonClickOneEvent(object sender, EventArgs e)
{
Button button = sender as Button;
if (button != null)
{
// now you know the button that was clicked
switch ((int)button.Tag)
{
case 0:
// First Button Clicked
break;
case 1:
// Second Button Clicked
break;
// ...
}
}
}
person
SwDevMan81
schedule
16.09.2009
Будут ли эти кнопки реагировать на события щелчка, например, когда я нажимаю кнопку 1, сообщение должно отображать «Кнопка 1 нажата», при нажатии кнопки 2 должно отображаться «Кнопка 2 нажата». и так далее...
- person Raj; 17.09.2009
Они определенно будут, продолжайте и протестируйте его, поставив точки останова или добавив MessageBox.Show (добавьте мои комментарии здесь); чтобы увидеть, как это работает.
- person SwDevMan81; 17.09.2009
Я предполагаю, что вы находитесь в цикле и делаете что-то вроде этого?
Button newButton = new Button();
newButton.Click += new EventHandler(newButton_Clicked);
Вы регистрируете один и тот же метод для всех кнопок. Вам понадобятся отдельные методы для каждой кнопки. Кроме того, вы можете назначить каждой кнопке отдельное идентифицирующее свойство и в своем обработчике проверить, какая кнопка была отправителем.
Оттуда вы можете предпринять соответствующие действия.
person
Nick
schedule
16.09.2009
Угадайте, что вы, возможно, пробовали: да, все кнопки запускают свои события в один и тот же метод, но параметр sender вашего метода обратного вызова содержит ссылку на кнопку, которая фактически вызвала конкретное событие.
person
Dario
schedule
16.09.2009
person
schedule
И как это решает проблему?
- person Moumit; 27.03.2016