我有一个MDI Parent表单,我在其中打开MDI Child表单,但如果我再点击一次,我不想重新打开它们,而不是我想要专注于已经打开的特定mdi子表单,我点击我的菜单条做了这个工作。我已经成功地尝试了很多,但总是失败了。我的代码是:
这是一个方法......
private bool CheckMdiClientDuplicates(string WndCls)
{
Form[] mdichld = this.MdiChildren;
if (this.MdiChildren.Length == 0)
{
return true;
}
foreach (Form selfm in mdichld)
{
string str = selfm.Name;
str = str.IndexOf(WndCls).ToString();
if (str != "-1")
{
return true;
}
}
return false;
}
我正在通过......实现这个方法。
private void myToolStripMenuItem_Click(object sender, EventArgs e)
{
MyForm f = new MyForm();//MyForm is the form on which i am working
if (CheckMdiClientDuplicates("MyNamespace.MyForm") == true)
{
f.MdiParent = this;
f.Show();
}
else
{
f.Activate();
f.BringToFront();
}
}
答案 0 :(得分:2)
f
仍然是您的new MyForm()
,那么您期望Activate
它会做什么?您需要获得想要带到前面的实际表单Activate
。
此外,除非您打算使用它,否则您可能不想制作新的MyForm
。
答案 1 :(得分:0)
您应该尝试以下代码:
这是当您单击第一个表单的按钮时出现的:
private void button1_click(object sender, EventArgs e){
Form1 f1 = null;
if (IsFormAlreadyOpen(typeof(Form1)) == null)
{
if (ActiveMdiChild != null)
{
ActiveMdiChild.Close();
}
f1 = new Form1();
f1.MdiParent = this;
f1.Show();
}
}
方法:
public static Form IsFormAlreadyOpen(Type FormType)
{
foreach (Form OpenForm in Application.OpenForms)
{
if (OpenForm.GetType() == FormType)
return OpenForm;
}
return null;
}
单击其他表单的下一个按钮时,请执行相同的操作。