Обычно я работаю с единичными формами экземпляров, просто для того, чтобы иметь переменную-член для ее хранения, а затем проверить, является ли она нулевой.
Итак, переменная-член:
private TestForm myTestForm = null;
а затем, когда вы проверяете, просто проверьте, является ли оно нулевым; если нет, то при создании формы назначьте ее переменной-члену и присоедините к обработчику событий для события закрытия дочерней формы.
if (myTestForm != null)
{
MessageBox.ShowDialog("Sorry, you already have a TestForm open!");
}
else
{
myTestForm = new TestForm();
myTestForm.FormClosing += myTestForm_FormClosing;
myTestForm.MdiParent = this;
myTestForm.Show();
}
и в закрывающем обработчике просто установите его обратно в ноль.
private void myTestForm_FormClosing(Object sender, FormClosingEventArgs e)
{
myTestForm = null;
}
Кроме того, я немного поискал, и вместо того, чтобы иметь событие и обработчик FormClosing, вы можете просто изменить свое условие на:
if ((myTestForm != null) && (!myTestForm.IsDisposed())