2012-12-07 47 views
1

使用一個簡單的應用程序啓動/停止按鈕,我想根據它的當前狀態做不同的事情。如果按鈕處於開始狀態,則執行代碼,然後切換到停止狀態並將OnClick事件更改爲StopButton_Click,反之亦然。更改按鈕點擊事件創建指數增加的事件

似乎無法改變按鈕的點擊屬性,因此使用下面的代碼工作,但不斷添加事件的實例。第一次點擊執行一次,第二次點擊執行兩次,第三次執行四次,無限次。

StartButton.Click += new System.EventHandler(StartButton_Click); 

交替

StartButton.Click += new System.EventHandler(StopButton_Click); 

有沒有辦法來取代onclick處理程序,而不是增加了?

回答

1

嘗試添加新的前移除所述事件處理程序:

StartButton.Click - = StartButton_Click;

0

+=與事件一起工作,因爲它做任何事情。它增加了已經存在的內容。

嘗試用 - =刪除現有事件處理程序,然後添加新處理程序。

1

一個選項是在添加另一個事件處理程序之前刪除先前的事件處理程序,但更簡單的選項是僅使用一個事件處理程序。事件處理程序可以查看一些內部狀態字段以確定要執行的操作;這可能比不斷添加/刪除事件處理程序更容易。

它可能是這個樣子:

private void buttonClick(object sender, EventArgs args) 
{ 
    if(buttonState == MyStateEnum.Start) 
     PerformStartAction(); 
    else if(buttonState == MyStateEnum.Stop) 
     PerformStopAction(); 
} 

然後,而不是添加/刪除你只需要一個不同的值賦給buttonState事件處理程序。