1多窗体操作:
确定哪个是主窗体 通过窗体进入其他窗体 代码如下
1 Form2 f2 = new Form2();//f2窗体实例化出来 2 f2.Show();//进入f2窗体 3 this.Hide();//将主窗体隐藏
存在问题:主窗体隐藏了,关闭其它窗体后,没有将主窗体显示或关闭,那么程序就关不上了
问题处理:构造函数传值,将窗体传到另一个窗体中去
1 public partial class Form2 : Form 2 { 3 Form1 F1 = null;//在窗体2中将窗体1实例化出来 4 public Form2(Form1 f1) 5 { 6 InitializeComponent(); 7 F1 = f1; //给F1赋值 8 } 9 //找到窗体的属性 事件里面的Formclosing行为双击进入编写关闭代码; 10 private void Form2_FormClosing(object sender, FormClosingEventArgs e) 11 { 12 F1.Close();关闭窗体2是窗体1关闭 13 }
2、窗体只能打开一个方法 代码如下
1 //创建一个全局的泛型集合,为了放置全部打开的窗体 2 List<Form> First = new List<Form>(); 3 //在窗体打开之前,判断集合中是否有name一致的窗体,如果有就说明已经打开了,就不要再打开了 4 bool has = false;//定义中间变量,判断窗体是否打开 5 Form2 f2 = new Form2();//f2窗体实例化出来 6 foreach (Form F in First)//遍历集合中的窗体 7 if (F.Name == f2.Name)//已经开启过 8 { 9 has = true;//将has赋值为true 10 } 11 12 if (has)//应经打开 13 { 14 } 15 else//没打开 16 { 17 First.Add(f2); 18 f2.Show();//打开f2窗体 19 }
存在问题一:当窗体打开了,关闭后,就无法再次打开了
解决办法:
1 //当窗体关闭时,清除Form1中集合中的此窗体对象记录 2 public void deleteform(Form F)//清除打开窗体的方法(函数) 3 { 4 First.Remove(F); 6 } 7 //关闭窗体2时调用此方法 8 private void Form2_FormClosing(object sender, FormClosingEventArgs e) 9 { 10 if (F1 != null) 11 { 12 F1.deleteform(this); 13 }
存在问题二:当窗体已经打开,再次点击打开按钮,不会将已打开的窗体重新显示并焦点进入
解决办法:
1.找到已打开对象,将WindowState属性设置为:Normal
2.找到已打开窗体的对象,使用Focus方法;
1 bool has = false;//定义中间变量,判断窗体是否打开 2 Form2 f2 = new Form2();//f2窗体实例化出来 3 foreach (Form F in First)//遍历集合中的窗体 4 if (F.Name == f2.Name)//已经开启过 5 { 6 has = true;//将has赋值为true 7 F.WindowState = FormWindowState.Normal;//找到已打开对象,将WindowState属性设置为:Normal 8 F.Focus();//设置焦点 9 10 } 11 12 if (has)//应经打开 13 { 14 f2.close(); 15 } 16 else//没打开 17 { 18 First.Add(f2); 19 f2.Show();//打开f2窗体 20 }
3、窗体之间的传值和控制
传值:构造函数传值
第一步,找到窗体对象,
第二步:将窗体对象的控件值更改
注意:要将窗体中的对象访问权限修改
找到窗体里的Form1.Designer.cs
进入修改对象的访问权限
将private 改为 public
4、提示框类型的窗体
ShowDialog();
作用:只能操作show的窗体,当关闭时才能操作别的窗体