【发布时间】:2022-01-15 00:24:30
【问题描述】:
我的程序在运行时动态创建了许多按钮。它们都附加到一个EventHandler,它链接到同一个方法。如何知道方法执行时按下了哪个按钮?我尝试使用 sender.Name,因为 object sender 在运行时是一个 Button,但它不会编译。
List<Button> buttons = new List<Button>();
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 1; i < 3; i++)
{
buttons.Add(new Button() { Name = "btn" + i });
buttons.Last().Click += new EventHandler(btn_Click);
}
}
public void btn_Click(object sender, EventArgs e)
{
MessageBox.Show(sender.Name + " is clicked");
}
【问题讨论】:
-
您可以将
sender转换为Button:((Button)sender).Name -
您还可以使用捕获 lambda,例如
button.Click += (o, e) => MessageBox.Show($"{button.Name} is clicked");