2013-07-05 290 views
2

我已經完成了一個簡單的Windows窗體。我的按鈕僅在第二次點擊時觸發。這是爲什麼 ?C#按鈕僅在第二次點擊時觸發

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

有人可以解釋這一點。

+2

爲什麼不直接在button1上調用doSomething_Click – rajeemcariazo

+0

對不起,這不是snmpconn。這是在事件處理程序 – user726720

+0

中的dosomething它仍然無法在第一次點擊。它只適用於第二次點擊 – user726720

回答

10

正如其他人所說,只有在第一次點擊時才勾住該事件。

廣場這條線在Form_Load事件

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

完美作品。謝謝。我只是一個Windows窗體初學者,所以可能會問一些更愚蠢的問題。 – user726720

+0

沒關係。我們都需要從哪裏開始。你可以直接在'button1_Click'中調用'this.dosomething'並且如果你已經完成了這個問題,請標記一個答案 –

3

因爲你鉤住了第一個點擊:

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

所以這將至少需要點擊獲得dosomething方法火。

這種方法的另一個問題是,如果拋出異常,最終可能會多次掛鉤此事件處理程序。我知道你正在將它從dosomething事件中刪除,但將它連接到構造函數中真的會更好。

10

這正是你告訴它要做的。

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

該行處理程序添加到click事件,這將爲未來所有的點擊運行。

3

你所要做的是被點擊的按鈕後,從按鈕去除結合的事件。您可以通過以下方式直接致電活動:

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

如果您希望按鈕僅工作1次,您可以取消寫入點擊事件。

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