用一个List保存所有打开的窗口的名字List<string> listForm = new List<string>(); //每次打开窗体前检查 if (listForm.Contains("Form1")) { MessageBox.Show("Form1窗体已经打了"); return; } else { Form f = new Form(); f.Name = ""; listForm.Add(f.Name); f.Show(); }
Form2 frm2 = new Form2(); frm2.MdiParent = this; frm2.Show();你原来MDI主窗口中执行上面代码的位置 用下面代码替换foreach (Form frm in this.MdiChildren) { if (frm.GetType().Name == "Form2") { frm.BringToFront(); return; } } Form2 frm2 = new Form2(); frm2.MdiParent = this; frm2.Show();
楼主,你搞错了,你定义了局部变量所以每点一次就实例化一个,也就是 xx a=new xx();所以为了你可以每次只能点一个窗口出来,你可以在方法外面定义一个xx a=new xx();然后在方法里面写a.show();还有一个办法是不要a.show(),而是a.shoudialog();
foreach(form frm in MDICHILDFORM) { if(frm is Form1) frm.active(); else { Form1 frm1=new form1(); frm1.show(); } } 好象可以的
foreach (Form frmOpen in this.MdiChildren)
{
if (frmOpen.Name == frmForm1.Name)
{
frmOpen.Activate();
frmOpen.WindowState = FormWindowState.Maximized;
bOpen = true;
break;
}
}
if (bOpen == false)
{
frmForm1.MdiParent = this;
frmForm1.Show();
frmForm1.WindowState = FormWindowState.Maximized;
}
{
XXX X=new XXX();X.Show();
}
else
{
MessageBox.Show("只能打开一个", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
private void button1_Click(object sender, EventArgs e)
{
foreach (Form frm in this.MdiChildren)
{
if (frm.GetType().Name == "Form2") { frm.BringToFront(); return; }
}
Form2 frm2 = new Form2();
frm2.MdiParent = this;
frm2.Show();
}
//每次打开窗体前检查
if (listForm.Contains("Form1"))
{
MessageBox.Show("Form1窗体已经打了");
return;
}
else
{
Form f = new Form();
f.Name = "";
listForm.Add(f.Name);
f.Show();
}
frm2.MdiParent = this;
frm2.Show();你原来MDI主窗口中执行上面代码的位置
用下面代码替换foreach (Form frm in this.MdiChildren)
{
if (frm.GetType().Name == "Form2") { frm.BringToFront(); return; }
}
Form2 frm2 = new Form2();
frm2.MdiParent = this;
frm2.Show();
{
if(frm is Form1)
frm.active();
else
{
Form1 frm1=new form1();
frm1.show();
}
}
好象可以的
6楼用一个List保存打开的窗口,不麻烦吗?这样每次关闭窗口的时候还要从List中移除打开的窗口,个人觉得麻烦。1楼的方法简单可行!