一、MDI窗体弹出唯一窗体
private void button1_Click(object sender, EventArgs e) { //设置一个bool变量,用来标记是否有已打开的重名窗口 bool has = false; Form1 form1 = new Form1(); //遍历mdi子窗口 foreach (Form form in MdiChildren) { //判断是否重名 if (form.Name == form1.Name) { //重名时has为true; has = true; //设置mdi窗口为父窗口 form.MdiParent = this; form.Show();//打开新窗口 form1.Close();//关闭原窗口 } } //如果has为true,表示有打开的窗口 if (has) { //遍历mdi窗口 foreach (Form form in MdiChildren) { //如果子窗口没有重名的窗口,关闭原来的窗口 if (form.Name != form1.Name) { form.Close(); } } } //如果has为false,表示没有打开的窗口 else { form1.MdiParent = this; form1.Show(); } }
二、弹出唯一窗口
List<Form> list = new List<Form>(); private void button1_Click(object sender, EventArgs e) { Form3 f3 = new Form3(this); bool hasForm = false; foreach (Form f in list) { if (f.Name == f3.Name) //说明这个窗体已经存在了 { hasForm = true; //我记录一下,这个窗体是已经存在的 f.WindowState = FormWindowState.Normal; f.Show(); f.Focus(); //我要把焦点定位到已经存在的这个窗体上 f3.Close(); //把新new出来的窗体关闭掉 } } if (hasForm == false) { f3.Show(); list.Add(f3); } }