【发布时间】:2019-10-31 03:59:45
【问题描述】:
我的意图是在运行时创建按钮并订阅它们的点击事件处理程序。一旦点击了动态创建的按钮,点击事件处理程序就会被取消订阅,这样点击事件只会触发一次。
在运行时,仅当我创建一个按钮并立即单击它时,所需的行为才有效。如果我创建了多个按钮,那么只有最后一个创建的按钮会取消订阅 click 事件。我错过了什么?
public partial class Form1 : Form
{
Button b;
int counter;
public Form1()
{
InitializeComponent();
}
// create more buttons
private void button1_Click(object sender, EventArgs e)
{
b = new Button();
b.Size = new Size(50, 50);
b.Click += b_Click; // dynamic button click event
this.Controls["flowLayoutPanel"].Controls.Add(b);
}
// dynamic button click eventhandler
void b_Click(object sender, EventArgs e)
{
b.Text = counter.ToString();
b.Click -= b_Click;
counter++;
}
}
【问题讨论】: