Практически идентичное решение уже обсуждалось в заметке «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(); }