如何动态创建5个按钮并分配单个单击事件?

我需要在Windows窗体上动态创建5个按钮,每个按钮都应该响应click事件。 我尝试了但是所有按钮都响应同一事件。

这就是尼克所说的是你的两个选择(你应该能够运行这个代码并看到两个选项):

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; // ... } } } 

我假设你在循环中做这样的事情?

 Button newButton = new Button(); newButton.Click += new EventHandler(newButton_Clicked); 

您正在为所有按钮注册相同的方法。 每个按钮都需要单独的方法。 或者,您可以为每个按钮分配不同的标识属性,并在处理程序中检查哪个按钮是发件人。

从那里你可以采取适当的行动。

猜测你可能尝试了什么:是的,所有按钮都将它们的事件激发到相同的方法,但是回调方法的sender -parameter包含对实际导致特定事件的按钮的引用。

 button b =new button (); b.text = " enter text"; b.click =+(then press Tab using key board)