2012-12-07 27 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事件处理程序。