我正在使用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);
}
}
答案 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()创建新视图,或者让该视图指向您要更改事件的视图。