Form1 должен помнить, какую Form2 он создал.Когда Form2 закрывается, она должна уведомить Form1, поэтому Form1 может аннулировать свою ссылку на Form2
private Form2 form2 = null;
void ShowForm2(...)
{
if (this.form2 != null) return; // form2 already shown
this.form2 = new Form2();
// make sure you get notified if form 2 is closed:
this.form2.FormClosed += onFormClosed;
}
void OnFormClosed(object sender, EventArgs e)
{
if (object.ReferenceEquals(sender, this.form2)
{
// form2 notifies that it has been closed
// form2 will Dispose itself
this.form2 = null;
}
}
Аккуратное закрытие Form1 и Form2
Примечание: если Form1 закрываетсябыло бы неплохо спросить Form2, разрешено ли закрытие (может быть, если нужно спросить оператора?).Если Form2 не хочет закрывать, отмените закрытие Form1.
Если закрытие разрешено, помните, что вы закрываете Form1 и закрываете Form2.Когда Form2 уведомляет Form1 о том, что она закрыта, проверьте, закрывали ли вы, и, если это так, перезапустите процедуру закрытия, на этот раз Form2 не будет, и закрытие может продолжаться в обычном режиме.