Does Form.Dispose() call controls inside's Dispose()?
When I create a Form, the auto-ge开发者_Python百科nerated code doesn't include an overrided Dispose method. Does that mean Dispose is not being called for all the controls in the form?
When you call Dispose
on the form, it will call Dispose
for each control in its Controls
collection. Those controls will in turn do the same, so in the end all controls' Dispose
method should have been invoked. Note that this is not based on whether the controls are present in the designer or not; it is based on what control instances that are found in the Controls
collection of the form at the time the call to Dispose
is done.
The only case when I could see that this would not happen is if you create some container control yourself and override Dispose
without propagating the call either to the base class or iterate over the contained controls and call Dispose
on them.
It should. You might have to look in the YourForm.designer.cs file. It will look like this:
protected override void Dispose(bool disposing)
{
if(disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing)
}
The base.Dispose();
call will take care of cleaning up the controls added to the Form.
精彩评论