Практически идентичное решение уже обсуждалось в заметке «C#, проверить, открыта ли форма» (копия).
Делается все примерно также. Для удобства вынесем проверку, открыта ли форма в отдельную функцию:
private bool IsFormOpen(string FormName)
{
foreach (Form f in Application.OpenForms)
{
if (f.Name == FormName)
{
f.Focus();
return true;
}
}
return false;
}
Если форма открыта, устанавливаем ей фокус (f.Focus()) и возвращаем true. Если формы нет — возвращаем false.
В обработчике события, в котором будем вызывать форму, вызываем эту функцию, и если она вернула false, создаем и показываем форму, иначе выходим из обработчика:
private void btnChild1_Click(object sender, EventArgs e)
{
if (IsFormOpen("frmChild1")) return;
frmChild1 fChild1 = new frmChild1();
fChild1.Show();
}
private void btnChild2_Click(object sender, EventArgs e)
{
if (IsFormOpen("frmChild2")) return;
frmChild2 fChild2 = new frmChild2();
fChild2.Show();
}