我需要在Windows窗体上动态创建5个按钮,每个按钮都应响应click事件。我尝试了但是所有按钮都响应同一事件。
答案 0 :(得分:34)
尼克所说的是你的两个选择(你应该能够运行这个代码并看到两个选项):
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;
// ...
}
}
}
答案 1 :(得分:8)
我假设你在循环中并做这样的事情?
Button newButton = new Button();
newButton.Click += new EventHandler(newButton_Clicked);
您正在为所有按钮注册相同的方法。每个按钮都需要单独的方法。或者,您可以为每个按钮分配不同的标识属性,并在处理程序中检查哪个按钮是发件人。
从那里你可以采取适当的行动。
答案 2 :(得分:4)
猜测你可能尝试了什么:是的,所有按钮都将它们的事件激发到同一个方法,但回调方法的sender
- 参数包含对实际导致特定事件的按钮的引用。
答案 3 :(得分:-1)
button b =new button ();
b.text = " enter text";
b.click =+(then press Tab using key board)