如何动态创建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)