我做了一个简单的窗体。我的按钮仅在第二次点击时触发。那是为什么?
private void button1_Click(object sender, EventArgs e)
{
//button1.Enabled = false; will disable the button before the event is fired
this.button1.Click += new System.EventHandler(this.dosomething);
}
private void dosomething(object sender, System.EventArgs e)
{
listBox1.Items.Add("Initializing :" + cart + "...");
this.button1.Click -= new System.EventHandler(this.dosomething);
}
有人可以解释一下。
答案 0 :(得分:10)
这正是你告诉它的。
this.button1.Click += new System.EventHandler(this.dosomething);
此行为click事件添加了一个处理程序,该事件将在以后的所有点击中运行。
答案 1 :(得分:10)
正如其他人所说,你只在第一次点击时才挂钩事件。
将此行放在form_load事件
中this.button1.Click += new System.EventHandler(this.dosomething);
答案 2 :(得分:3)
因为您在第一次点击时将其挂起:
this.button1.Click += new System.EventHandler(this.dosomething);
因此,至少需要点击一次才能启动dosomething
方法。
此方法的另一个问题是,如果抛出异常,您最终可能会多次挂起此事件处理程序。我知道你在dosomething
事件中删除了它,但是在构造函数中连接这个事件真的会更好。
答案 3 :(得分:3)
您要做的是在单击按钮后从按钮中删除绑定事件。您可以通过以下方式直接致电该活动:
private void button1_Click(object sender, EventArgs e)
{
dosomething(null, null)
}
答案 4 :(得分:0)
如果您希望按钮只能工作一次,则可以取消订阅点击事件。
private void button1_Click(object sender, EventArgs e)
{
DoSomething();
button1.Click -= button1_Click;
}