Например, для того, чтобы не дать пользователю повторно открыть одно и то же окно, несколько раз.
Например, такой код при нажатии на кнопку создаст столько форм frmChild
, сколько раз кнопка будет нажата:
private void btnOpenForm_Click(object sender, EventArgs e) { frmChild fChild = new frmChild(); fChild.Show(); }
Конечно, можно сделать форму модальной, с помощью fChild.ShowDialog()
, тогда мы не будем иметь доступа к первой форме, пока вторая не закроется. Но если это не нужно, например, мы хотим свободно переключаться между двумя формами, но вторую создать только один раз.
Открытые формы содержатся в Application.OpenForms
. И фактически, надо просто перебрать этот массив, чтобы посмотреть, открыта или нет форма, например по ее имени:
foreach (Form f in Application.OpenForms) { if (f.Name == "frmChild") { lblFormOpened.Text = "Form #2 already opened!"; return; } }
Код обработчика нажатия кнопки целиком:
private void btnOpenForm_Click(object sender, EventArgs e) { lblFormOpened.Text = ""; foreach (Form f in Application.OpenForms) { if (f.Name == "frmChild") { lblFormOpened.Text = "Form #2 already opened!"; return; } } frmChild fChild = new frmChild(); fChild.Show(); }