我正在开发一个Windows Forms应用程序,现在遇到了一些困难。
我有类似于MVC架构的东西。有时,我想让属于视图的控件停止监听事件。所以在视图代码中,我写了以下方法:
public void enableEventHandlers(bool enable)
{
if (enable)
{
control.someEvent += someEventHandler;
}
else
{
control.someEvent -= someEventHandler;
}
}
事情是这样的:当我想要删除事件处理程序时,只需将此方法作为参数调用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);
}
}
这个不起作用:
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);
}
}