UserControl MouseLeave在FormClosing之后发生

时间:2016-08-26 13:42:37

标签: vb.net winforms events user-controls

我在运行时将一个usercontrol放在表单上。 我在FormClosing之后遇到UserControl_MouseLeave。

我想知道这是否应该在正常情况下发生。

为了测试这是否也会正常发生(而不仅仅是在我的庞大项目中)我设置了一个带有微小用户控件的测试项目(只是有一定的背景色),而我无法获得UserControl_MouseLeave事件 收到Form_Closing事件后。 这让我想知道我的其他用户控件是否需要很长时间才能卸载,因此不会立即消失,因此在FormClosing事件之后甚至可以保持活动状态。

不幸的是,我没有找到任何关于事件何时发生的信息。

有人知道这种行为是否正常吗?

1 个答案:

答案 0 :(得分:2)

当FormClosing事件被触发时,没有任何东西被破坏,因此您对处理需要很长时间的观察可能实际上是正确的。

当表单关闭时,会在内部调用WM_CLOSE方法。以下是发生的情况的流程图:

Form closing flowchart

摘自MSDN文章Closing the Window

WM_CLOSE中,{1}}事件在MDI子项和所有拥有的表单中引发。即使在那之后,仍有可能取消手术。

如果我们继续关闭,窗口将从屏幕上移除(但它仍然存在)只有在此之后,WM_DESTROY消息才会发送到表单本身和子窗口。 MSDN states that

  

在处理消息期间,可以假设所有子窗口仍然存在。

如果你有一个非常复杂的应用程序需要花费更长时间来处理,那么在FormClosing事件之后仍然可能触发事件,即使表单在那时不可见。

你的代码也有可能出现问题,但是没有看到它,我认为这就是行为的原因。

修改:您可以通过查看Reference Source来查看表格如何处理所有内容。