我有一个奇怪的问题,让我解释一下:
我有一个派生自基类的表单。创建表单时,还会生成一个处理事件管理,绑定等的行为类...
我创建了一个表单实例(FormFoo)。当创建关联的行为类时,它有一个方法,其签名为:grid_EventA(....)处理grid.eventA
我想在FormFoo中处理EventA而不是行为类,所以我删除了行为类中生成的处理程序,并添加了一个指向FormFoo中方法的处理程序。这一切都只是很好的。该事件仅在FormFoo中正确处理。
接下来,我通过FormFoo中的按钮单击实例化一个模态表单(FormBar)。然后我关闭FormBar。现在我们遇到了问题。
当eventA触发时,它现在从FormFoo中的事件处理程序和与表单foo(坏)相关联的行为类中处理。
当表单再次获得焦点时,行为类(grid_EventA(....)处理grid.eventA)中的事件处理程序是否重新订阅?我不明白该事件是如何被重新订阅的。
我想通了
我从方法签名中删除了Handles grid.EventA:
grid_EventA(....)处理grid.eventA
然后我在使用:
初始化BehaviorClass期间添加了处理程序AddHandler grid.EventA,AddressOf grid_EventA
一旦我这样做,问题就消失了。看来当你使用MethodName(..)处理时,当控件重新聚焦时,事件绑定会被重置。 VB这是引人入胜的。