我正在开发一个 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() 来创建一个新视图,或者让该视图指向您想要更改事件的视图。