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

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

请尝试以下方法

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

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

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

如果要查看单击了哪个按钮,则可以在创建和分配按钮后执行以下操作。 考虑到您手动创建按钮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 } 

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

查看此示例如何创建5个按钮并在C#中动态分配单个单击事件

看起来这样可行,同时为数组的每个元素添加一个标记

 Button button = sender as Button; 

你知道更好的方法吗?

关于您的评论说您想知道单击了哪个按钮,您可以将按钮的.Tag属性设置为您创建和使用时所需的任何类型的标识字符串

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