C#按钮仅在第二次单击时触发

时间:2013-07-05 14:34:04

标签: c# .net winforms

我做了一个简单的窗体。我的按钮仅在第二次点击时触发。那是为什么?

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

有人可以解释一下。

5 个答案:

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