删除c#中的事件处理程序

时间:2016-06-22 14:55:19

标签: c# events

我正在使用Windows窗体应用程序而且我已经到了无法理解正在发生的事情的地步。

我有类似于MVC架构的东西。有时我希望属于视图的控件停止监听事件。所以在视图代码中我写了一个如下所示的方法:

<div myCustomDirective (someEvent)="callSomethingOnParent($event)">HELLO</div>

问题是:当我想删除事件处理程序时,我只是将false作为参数调用此方法。 如果我从视图代码中调用此方法,它就可以正常工作。但是如果我从控制器代码中调用此方法,它就不起作用(事件处理程序不会被删除)。

只是为了提供更多背景信息:

这有效:

public void enableEventHandlers(bool enable)
{
    if (enable)
    {
        control.someEvent += someEventHandler;
    }
    else
    {
        control.someEvent -= someEventHandler;
    }
}

这不起作用:

public partial class View : Form
{
     public void enableEventHandlers(bool enable)
     {
         // The code I already showed
     }

     public void doSomething()
     {
         enableEventHandlers(false);
         // do something
         enableEventHandlers(true);
     }
 }

2 个答案:

答案 0 :(得分:0)

最后我发现了问题。似乎我以某种方式将事件处理程序两次附加到同一个Control。无论如何,我找不到确切的行号。我找到的解决方案是在添加新事件之前删除事件处理程序。 所以方法enableEventHandlers现在看起来像这样:

public void enableEventHandlers(bool enable) {
    if (enable)
    {
        control.someEvent -= someEventHandler;
        control.someEvent += someEventHandler;
    }
    else
    {
        control.someEvent -= someEventHandler;
    } 
}

感谢您的回答。

答案 1 :(得分:-2)

我不知道是不是,但你没有初始化你的视图。你只需说'#34;私人查看视图&#34;,但这并不是指向任何地方。您希望通过执行私有View v = new View()创建新视图,或者让该视图指向您要更改事件的视图。