Обычно вы не можете переопределить методы Dipose формы, поскольку они уже определены в файле Form.Designer.cs. Есть небольшая хитрость, как добавить свою собственную логику размещения в форму.
Используя следующий класс:
public class Disposer : Component
{
private readonly Action<bool> disposeAction;
public Disposer(Action<bool> disposeAction)
{
this.disposeAction = disposeAction;
}
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
this.disposeAction(disposing);
}
public static Disposer Register(ref IContainer container, Action<bool> disposeAction)
{
Disposer disposer = new Disposer(disposeAction);
if (container == null)
container = new System.ComponentModel.Container();
container.Add(disposer);
return disposer;
}
}
Сохраните список подчиненных форм и добавьте следующую строку в конструктор основной формы:
Disposer.Register(ref this.components, this.MyDisposeAction);
Когда ваша основная форма будет удалена, все ваши подчиненные формы также будут удалены, например ::
private void MyDisposeAction(bool disposing)
{
if (disposing)
{
foreach (var subForm in this.subForms)
{
subForm.Dispose(disposing);
}
}
}