winform多窗体之间的操作

1.通过操作一个窗体打开另一个窗体

已有窗体为Form1.Form1中有一个按钮,对该按钮编写点击事件:

Form2 f2 = new Form2();
f2.Show();

通过这段代码来打开Form2.

在实际应用中会出现代开Form2后需要Form1隐藏的情况,此时可以加入代码:this.Hide();来实现隐藏Form1.

[不能关闭Form1,如果关闭Form1,那么Form2也会关闭,因为Form1是主窗体]

2.在窗体之间进行值的传递

在某些情况下,需要用到某个已经获取到的值,为了提高程序运行效率,不能再次查询这个值,这时候就需要传递值.

窗体间值的传递需要用到打开窗体.

Form2 f2 = new Form2(要传递的值);
f2.Show();

这个时候值已经传递到Form2去了,这时候需要考虑如何在Form2中取出这个值

复制代码
Users z = null;//根据值的类型实例化
public Form4(Users a) //方法这里也要写要传入的值,注意类型
{
InitializeComponent();
z = a; //这个时候值就传递进来了,因为值定义在方法外面,所有在这个命名空间里面可以随意调用
}
复制代码

3.窗体唯一性设置

打开一个窗体,这个窗体只能被打开一个,打开了一个,就不能再打开另一个窗体.

单纯的能够打开一个:

复制代码
//实例化一个Form类型泛型集合,记录已经打开的窗体
List<Form>AllF=new List<Form>();
//点击事件,这里直接用大括号代替
{
//实例化一个点击要打开的Form1对象
   Form1 f1=new Form1();
//判断AllF里面有没有Form1
bool has=false;
//遍历泛型集合,看看里面有没有这个要打开的Form1
foreach(Form ff in AllF)
{
   if(ff is Form1)//如果ff是From1类型
   {
     has=true;
    //把查到的ff转换成Form1类型
     f1  =ff as  Form1;
    }
}
//如果有Form1,证明已经打开了
   if(has)
  {
   //当窗体最小化的时候将其还原到打开的默认状态
   f1.WindowState=ForWindowState.Normal;
   }
//如果没有说明还没有打开,那么打开Form1,并把Form1添加到集合AllF里
   else
   {
    AllF.Add(f1);
     f1.Show();
   }
}
复制代码

这样实际实现了只能打开一个同样窗体的目的,但是这样有一个问题,就是打开一个窗体,关闭之后,就没法打开了.对此的解决发方法是:

写一个方法,在Form1的关闭事件FormClosing里面,每当关闭的时候把Form1给移除.

方法:

 public void Fclose(Form a)

{

  AllF.Remove(a);

}

将这个页面的所有都传过去:

//实例化一个点击要打开的Form1对象
   Form1 f1=new Form1(this);

然后在Form1的关闭事件FormClosing里面,调用移除的方法即可.

转载于:https://www.cnblogs.com/weiyu11/p/6798692.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值