C#按钮仅在第二次单击时启动

C#按钮仅在第二次单击时启动,c#,.net,winforms,C#,.net,Winforms,我做了一个简单的windows窗体。我的按钮只在第二次点击时启动。为什么呢 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); } pr

我做了一个简单的windows窗体。我的按钮只在第二次点击时启动。为什么呢

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

有人能解释一下吗。

因为你在第一次点击时就把它连接起来了:

this.button1.Click += new System.EventHandler(this.dosomething);
因此,至少需要单击一次才能获得要激发的
dosomething
方法


这种方法的另一个问题是,如果抛出异常,您可能会多次挂接此事件处理程序。我知道您正在
dosomething
事件中删除它,但最好只在构造函数中连接此事件。

这正是您告诉它要做的

   this.button1.Click += new System.EventHandler(this.dosomething);

这一行向click事件添加了一个处理程序,该事件将在以后的所有单击中运行。

正如其他人所说,您仅在第一次单击时连接事件

将该行放入form_load事件中

this.button1.Click += new System.EventHandler(this.dosomething);

您试图做的是在单击按钮后从按钮中删除绑定事件。您可以通过以下方式直接调用事件:

private void button1_Click(object sender, EventArgs e)
{
    dosomething(null, null)
}

若你们想按钮只工作一次,你们可以取消订阅点击事件

private void button1_Click(object sender, EventArgs e)
{
    DoSomething();
    button1.Click -= button1_Click;
}

为什么不直接按按钮1_click调用doSomething?对不起,那不是snmpconn。在-=eventhandler中是dosomething它在firs click中仍然不起作用。它只在第二个ClickPerfect上起作用。非常感谢。我只是windows窗体的初学者,所以可能会问一些更愚蠢的问题。没关系。我们都需要从哪里开始。您可以直接在
按钮中调用
this.dosomething
,单击
也请在完成此问题后标记答案