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

Mat*_*rez 5 c# events

我正在开发一个 Windows 窗体应用程序,但我已经无法理解发生了什么。

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

public void enableEventHandlers(bool enable)
{
    if (enable)
    {
        control.someEvent += someEventHandler;
    }
    else
    {
        control.someEvent -= someEventHandler;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

这有效:

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

     public void doSomething()
     {
         enableEventHandlers(false);
         // do something
         enableEventHandlers(true);
     }
 }
Run Code Online (Sandbox Code Playgroud)

这不起作用:

public class controller
{
     private View myView;

     public void doSomething()
     {
         myView.enableEventHandlers(false);
         // Do something... but somehow everything inside my Form is still paying attention to events
         myView.enableEventHandlers(true);
     }
}
Run Code Online (Sandbox Code Playgroud)

Tan*_*uyB -2

我不知道是不是这样,但你没有初始化你的视图。您只是说“私有视图”,但这并不指向任何地方。您想要通过执行 private View v = new View() 来创建一个新视图,或者让该视图指向您想要更改事件的视图。