WinForm 多窗体操作

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的窗体,当关闭时才能操作别的窗体

posted on 2016-09-22 14:38  胡了个凡  阅读(6144)  评论(0编辑  收藏  举报

导航