如何处理以编程方式添加的按钮事件? C#

时间:2010-01-20 19:34:03

标签: c# dynamic controls

我正在使用C#制作Windows窗体应用程序。我在运行时以编程方式添加按钮和其他控件。我想知道如何处理这些按钮的点击事件?

6 个答案:

答案 0 :(得分:29)

尝试以下

Button b1 = CreateMyButton();
b1.Click += new EventHandler(this.MyButtonHandler);
...
void MyButtonHandler(object sender, EventArgs e) {
  ...
}

答案 1 :(得分:20)

使用此代码处理多个按钮的点击事件:

    private int counter=0;

    private void CreateButton_Click(object sender, EventArgs e)
    {
        //Create new button.
        Button button = new Button();

        //Set name for a button to recognize it later.
        button.Name = "Butt"+counter;

       // you can added other attribute here.
        button.Text = "New";
        button.Location = new Point(70,70);
        button.Size = new Size(100, 100);

       // Increase counter for adding new button later.
        counter++;

        // add click event to the button.
        button.Click += new EventHandler(NewButton_Click);
   }

    // In event method.
    private void NewButton_Click(object sender, EventArgs e)
    {
        Button btn = (Button) sender; 

        for (int i = 0; i < counter; i++)
        {
            if (btn.Name == ("Butt" + i))
            {
                // When find specific button do what do you want.
                //Then exit from loop by break.
                break;
            }
        }
    }

答案 2 :(得分:3)

如果要查看单击了哪个按钮,则可以在创建和分配按钮后执行以下操作。考虑到您手动创建按钮ID:

protected void btn_click(object sender, EventArgs e) {
     Button btn = (Button)sender // if you're sure that the sender is button, 
                                 // otherwise check if it is null
     if(btn.ID == "blablabla") 
         // then do whatever you want
}

您也可以通过为每个按钮提供命令参数来检查它们。

答案 3 :(得分:2)

答案 4 :(得分:2)

似乎这样可行,同时为数组的每个元素添加标记

Button button = sender as Button;
你知道更好的方法吗?

答案 5 :(得分:0)

关于您的评论说你想知道点击了哪个按钮,你可以将按钮的.Tag属性设置为你想要的任何类型的识别字符串,并使用

private void MyButtonHandler(object sender, EventArgs e)
    {
        string buttonClicked = (sender as Button).Tag;
    }