Мне нужно динамически создавать 5 кнопок в форме Windows, и каждая кнопка должна отвечать на событие click. Я попробовал, но все кнопки отвечают на одно и то же событие.
Как создать 5 кнопок и назначить отдельные события кликов динамически?
Ответ 1
Это то, о чем говорит Ник, - это ваши два варианта (вы должны иметь возможность запускать этот код и видеть оба варианта):
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;
// ...
}
}
}
Ответ 2
Я предполагаю, что вы в цикле и делаете что-то вроде этого?
Button newButton = new Button();
newButton.Click += new EventHandler(newButton_Clicked);
Вы регистрируете один и тот же метод для всех кнопок. Для каждой кнопки вам понадобятся индивидуальные методы. Кроме того, вы можете назначить каждой кнопке другое свойство идентификации и в вашем обработчике, проверьте, какая кнопка была отправителем.
Оттуда вы можете предпринять соответствующие действия.
Ответ 3
Угадайте, что вы могли попробовать: Да, все кнопки запускают свои события одним и тем же методом, но sender
-параметр вашего метода обратного вызова содержит ссылку на кнопку, которая фактически вызвала конкретное событие.
Ответ 4
button b =new button ();
b.text = " enter text";
b.click =+(then press Tab using key board)