UserControl MouseLeave 发生在 FormClosing 之后

UserControl MouseLeave occurs after FormClosing

我在运行时将用户控件放置在窗体上。 我在 FormClosing 后遇到 UserControl_MouseLeave。

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

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

遗憾的是,我没有找到有关事件何时发生的任何信息。

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

当 FormClosing 事件被触发时,没有任何东西被破坏,所以你对处理花费很长时间的观察实际上可能是正确的。

当窗体关闭时,WM_CLOSE 方法在内部被调用。这是发生的事情的流程图:

摘自 MSDN 文章 Closing the Window

WM_CLOSE 中,FormClosing 事件在 MDI children 和所有拥有的窗体中引发。即使在那之后,仍然有可能取消操作。

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

During the processing of the message, it can be assumed that all child windows still exist.

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

也有可能是您的代码有问题但没有看到,我认为这就是导致该行为的原因。

编辑: 您可以通过查看 Reference Source.

来深入了解表单如何处理所有内容