Reputation: 11389
I have a usercontrol placed on a form at runtime. I'm experiencing a UserControl_MouseLeave after FormClosing.
I'm wondering if this should happen under normal circumstances.
To test if this would occur normally as well (and not just in my huge project) I set up a test project with a tiny usercontrol (just having a certain backcolor), and I haven't been able to get the UserControl_MouseLeave event after receiving the Form_Closing event. This makes me wonder if my other usercontrol just takes really long to unload therefore doesn't go away right away and thus even stays alive after the FormClosing event.
Unfortunately I did not find any information about when the events can occur.
Does anybody know if this behaviour is normal?
Upvotes: 0
Views: 56
Reputation: 7189
Nothing is destroyed when the FormClosing event is fired so your observation about the disposing taking a long time might actually be correct.
When the form is closed, the WM_CLOSE
method is called internally. Here's a flowchart of what happens:
Taken from MSDN article Closing the Window
In WM_CLOSE
, the FormClosing
event is raised in MDI children and all owned forms. Even after that, there's still a possibility to cancel the operation.
If we continue with the closing, the window is removed from the screen (but it still exists) Only after that, the WM_DESTROY message is sent to both the form itself and the child windows. MSDN states that:
During the processing of the message, it can be assumed that all child windows still exist.
If you have a very complex application that takes longer to dispose of, it's certainly possible that events are still fired after the FormClosing event and even if the form is not visible at that time.
It's also a possibility that there's something wrong with your code but without seeing it, this is what I think is the reason for the behaviour.
Edit: You can take a look at the insides of how the Form handles everything by checking out the Reference Source.
Upvotes: 2