如何在c#.net中对动态创建的按钮执行点击事件

本文关键字:按钮 执行 事件 创建 动态 net | 更新日期: 2023-09-27 17:57:35

我正在尝试构建一个应用程序,用户可以在其中选择类别,并根据它显示其子类别,这些子类别是按钮,它们是动态创建的。

现在,由于按钮是动态创建的,所以我不知道如何在button_click事件下编写代码,因为我不知道有多少子类别。

那么,有没有什么方法可以执行特定按钮的点击事件,这样我就可以执行某些命令?

已编辑

这是我尝试的代码

Button btnDynamicButton = new Button();
private void btnclick_Click(object sender, EventArgs e)
{
label2.Text = btnDynamicButton.Text;
}
private void btnappetizer_Click(object sender, EventArgs e)
{
 groupBox2.Visible =false;
 DataTable dt = new DataTable();
 dt = itemmasterbl.SelectallrecordFromtblItem(btnappetizer.Text);
 for (int i = 0; i < dt.Rows.Count; i++)
 {
  string name = "Appetizer" + DynamicButtonCount;
  Button btnDynamicButton1 = new Button();
  btnDynamicButton1.Name = name;
  btnDynamicButton1.Text = name;
  btnDynamicButton1.Size =
  new System.Drawing.Size(150, 30);
  btnDynamicButton1.Location =
  new System.Drawing.Point(180, DynamicButtonCount * 30);
  btnDynamicButton1.Click +=new EventHandler(btnclick_Click);<br>
  Controls.Add(btnDynamicButton1);
  DynamicButtonCount++;
  btnDynamicButton = btnDynamicButton1;
  }
 }

一旦我这样做,它会根据开胃菜下itemmaster DB中的值的数量创建三个按钮,但一旦我点击三个按钮中的任何一个,标签只显示最后一个按钮的文本,因为在最后一行我有:

btnDynamicButton=btnDynamicButton1;

最后一个按钮是infos,但我想要我按下哪个按钮,标签应该显示相应的文本。我怎样才能做到这一点。

如何在c#.net中对动态创建的按钮执行点击事件

您可以将所有逻辑放入一个处理程序中:

System.Windows.Forms.Button b = new System.Windows.Forms.Button();
b.Click += new EventHandler(b_Click);
//finally insert the button where it needs to be inserted.
...
void b_Click(object sender, EventArgs e)
{
    MessageBox.Show(((System.Windows.Forms.Button)sender).Name + " clicked");
}

编辑:

您正在将按钮的引用存储在字段btnDynamicButton中。因此,它总是被您创建的最新按钮覆盖。您应该而不是通过使用字段引用按钮。单击处理程序的sender参数包含已单击的按钮元素。请参阅上面的代码:简单地将sender转换为Button,您就知道单击了哪个按钮:

private void btnclick_Click(object sender, EventArgs e)
{
   Button btn = (Button)sender
   label2.Text = btn.Text;
}