有一个带有开始/停止按钮的简单应用程序,我想根据它的当前状态做不同的事情。如果按钮处于启动状态,则执行代码然后更改为停止状态并将OnClick事件更改为StopButton_Click,反之亦然。
似乎无法更改按钮的on-click属性,因此使用下面的代码可以正常工作,但不断添加事件的实例。首次点击执行一次,第二次点击执行两次,第三次执行四次,无限期。
StartButton.Click += new System.EventHandler(StartButton_Click);
交替使用
StartButton.Click += new System.EventHandler(StopButton_Click);
有没有办法替换OnClick处理程序而不是添加它?
答案 0 :(得分:1)
尝试在添加新事件之前删除事件处理程序:
StartButton.Click - = StartButton_Click;
答案 1 :(得分:1)
一个选项是在添加另一个之前删除先前的事件处理程序,但更简单的选项是仅使用单个事件处理程序。事件处理程序可以查看某个内部状态字段以确定要执行的操作;这可能比不断添加/删除事件处理程序更容易。
看起来像这样:
private void buttonClick(object sender, EventArgs args)
{
if(buttonState == MyStateEnum.Start)
PerformStartAction();
else if(buttonState == MyStateEnum.Stop)
PerformStopAction();
}
然后,您只需要为buttonState
分配不同的值,而不是添加/删除事件处理程序。
答案 2 :(得分:0)
+=
可以处理事件,因为它可以执行任何其他操作。它增加了已有的东西。
尝试使用 - =删除现有的事件处理程序,然后添加新的事件处理程序。