Предположим, что если мы вызываем форму из щелчка по меню в форме MDI, нам нужно создать объявление экземпляра этой формы на верхнем уровне, например:
Form1 fm = null;
Затем нам нужно определитьсобытие щелчка меню, чтобы вызвать Form1 следующим образом:
private void form1ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (fm == null|| fm.Text=="")
{
fm = new Form1();
fm.MdiParent = this;
fm.Dock = DockStyle.Fill;
fm.Show();
}
else if (CheckOpened(fm.Text))
{
fm.WindowState = FormWindowState.Normal;
fm.Dock = DockStyle.Fill;
fm.Show();
fm.Focus();
}
}
CheckOpened , определенный для проверки, Form1 уже открыта или нет:
private bool CheckOpened(string name)
{
FormCollection fc = Application.OpenForms;
foreach (Form frm in fc)
{
if (frm.Text == name)
{
return true;
}
}
return false;
}
Надеюсь, что это решит проблемы, связанные с созданием нескольких экземпляров формы, а также с фокусировкой на Form1 при щелчке меню, если оно уже открыто или свернуто.