1

有一个带有开始/停止按钮的简单应用程序,我想根据它的当前状态做不同的事情。如果按钮处于 Start 状态,则执行代码然后更改为停止状态并将 OnClick 事件更改为 StopButton_Click ,反之亦然。

似乎无法更改按钮的单击属性,因此使用下面的代码可以工作,但会不断添加事件的实例。第一次点击执行一次,第二次点击执行两次,第三次执行四次,无限循环。

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

交替使用

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

有没有办法替换 OnClick 处理程序而不是添加到它?

4

3 回答 3

1

在添加新事件处理程序之前尝试删除事件处理程序:

StartButton.Click -= StartButton_Click;

于 2012-12-07T23:24:34.360 回答
1

一种选择是在添加另一个事件处理程序之前删除以前的事件处理程序,但更简单的选择是只使用单个事件处理程序。事件处理程序可以查看一些内部状态字段来确定要做什么;这可能比不断添加/删除事件处理程序更容易。

它可能看起来像这样:

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

然后,无需添加/删除事件处理程序,您只需为buttonState.

于 2012-12-08T01:33:18.117 回答
0

+=与事件一起工作,就像它做其他事情一样。它增加了已经存在的东西。

尝试使用 -= 删除现有的事件处理程序,然后添加新的事件处理程序。

于 2012-12-07T23:25:58.853 回答