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

时间:2009-09-16 17:10:23

标签: c# winforms events dynamic button

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

4 个答案:

答案 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)