我创建了一个这样的事件:
Private Handler1 As New EventHandler(AddressOf resize_page)
然后在我的sub中我添加如下:
AddHandler Main.Resize, Handler1
然后我有一个Sub来处理它
Private Sub resize_page(){
' do something
}
当我调整表单大小时,我的子例程永远不会被调用。它中的动作永远不会被执行。我甚至把MessageBox放在第一行,我的消息永远不会弹出,所以我知道它没有被调用。
为什么不解雇?
答案 0 :(得分:1)
事实证明这是一个奇怪的事件组合,我仍然无法解释或弄清楚,但我终于通过删除所有内容并向后追踪它来达到最底层。
我在这个应用程序中有几个模块,每个模块打开一个面板,占用表单的整个宽度和高度(只有一个表单),所以它就像一个“页面”。当用户完成页面时,他点击关闭按钮,该按钮处理该模块中的所有内容。所以他正在有效地关闭页面并转到另一个页面。由于每个页面占据了表单的整个宽度和高度,我希望它在表单大小更改时展开以填充表单。所以每个模块都有一个事件监听器,它监听“Main”表单以调整大小。
这就是发生的事情:
我在第一页创建了一个监听器,因此它可以自行调整大小(工作正常)
我在第二页创建了一个监听器,因此它可以自行调整大小,但我不小心在此页面上调用了第一页的监听器。所以它有两个监听器,它们没有抛出错误,因为第一页的resize sub被错误地公开而不是私有。
第3页的事件监听器是一个无效的监听器,虽然它的创建方式与第一页的一样。
在向后追踪之后,我发现第2页上的侦听器正在调用第1页上的sub并将其删除。一旦我删除它,第3页的监听器就开始工作了。我仍然无法弄清楚为什么因为即使第一页被处理掉它的元素,它的resize sub(公共的)仍然可以从第2页访问。当页面被处理时我删除了事件监听器以及其他所有内容。然而,第2页上有一个链接打开了第3页而没有放置第2页,这在某种程度上阻止了第3页的监听器被触发。
无论如何,它就像那样简单,现在它按预期工作,所以我会继续前进。
感谢您的信息。
答案 1 :(得分:0)
主要指的是什么?
你正在添加处理程序错误的东西是我的猜测。 您希望将处理程序添加到表单中。
AddHandler Me.Resize, Handler1
或者
AddHandler [Yourforminstance].Resize, Handler1
你似乎还混淆了语言?还是只是我?洛尔
应该是
Private Sub resize_page()
'Code here
End Sub