winform窗体 【打开多个窗体、窗体之间传值、打开唯一窗体】
1、打开多个窗体
2、窗体之间的传值
3打开唯一窗体
Form1中btn1按钮点击show出Form2,当Form2处于开启状态时,再次点击btn1不会继续弹出窗体,而是将焦点定位至已开启的Form2上;
当Form2关闭后,再次点击btn1则会show出一个新的Form2;
Form1:
//创建一个全局集合,用来放置已经show出的窗体对象 List<Form> list = new List<Form>(); //btn1点击事件: private void button1_Click(object sender, EventArgs e) { bool hasForm = false; //判断窗体是否已经弹出 Form2 f2 = new Form2(); //实例化一个弹出窗体对象 f2.Owner = this; //将弹出对象的拥有者设置为当前窗体 if (list.Count > 0) //如果集合中有元素 { foreach (Form f in list) //遍历它们 { if (f.Name == f2.Name) //如果要弹出的窗体对象已经存在 { hasForm = true; //表示已经弹出 f.Focus(); //焦点定位已经弹出的窗口 } } } if (hasForm) //当前已经有窗口弹出 { f2.Close(); //把新实例化的窗体对象给释放掉 } else //如果没有窗口弹出 { list.Add(f2); //将新窗体添加进集合 f2.Show(); //弹出窗体 } }
此时窗体已经可以弹出唯一了,但是当窗体关闭后就无法再次弹出了;
此时需要在Form1中写一个方法,并且在弹出窗口的FormClosing事件中调用这个方法;
//Form1中的方法: public void _Remove(Form f) { if (list.Contains(f)) { list.Remove(f); } } //弹出窗口Form2中调用: private void Form2_FormClosing(object sender, FormClosingEventArgs e) { if (this.Owner is Form1) { (this.Owner as Form1)._Remove(this); } }