winform窗体 【打开多个窗体、窗体之间传值、打开唯一窗体】

摘要:
1.打开多个表单。2.表单之间的价值转移。3.打开唯一表单。在Form1中,单击btn1按钮以显示Form2。当Form2打开时,再次单击btn1将不会继续弹出表单,而是将焦点放在打开的Form2上;当Form2关闭时,再次单击btn1以显示新的Form2;Form1://创建一个全局集合以放置显示的表单对象List<form>List=newList<form˃()//

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);
        }
    }

免责声明:文章转载自《winform窗体 【打开多个窗体、窗体之间传值、打开唯一窗体】》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇kibana 查询语法mysql8.0 创建数据库及对应的用户下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【原创】进销存快速开发框架 (Winform三层架构+DevExpress+MsSQL)

进销存系统简介 进销存,又称为购销链,是指企业管理过程中采购进货 (进)--> 入库存货(存)-->销售出库(销)三个主要流程环节的动态管理过程。   进:指询价、采购到入库与付款的过程。 销:指报价、销售到出库与收款的过程。 存:指出入库之外,包括领料、退货、盘点、损益、借入、借出、调拨等影响库存数量的动作。     进销存软件是对企业生产经...

在Winform界面中使用DevExpress的TreeList实现节点过滤查询的两种方式

在我较早的一篇随笔《在DevExpress程序中使用TeeList控件以及节点查询的处理》中,介绍了在树形列表TreeList控件上面,利用SearchControl实现节点的模糊查询过滤操作,效果还是非常不错的,TreeList功能比较强大,界面也相对比微软内置的Winform的TreeView控件美观不少。后来在一次偶然过程中,发现TreeList控件...

关于WinForm/Web如何使用缓存Cach

Cache 的绝对到期与滑动到期 绝对到期:设置绝对过期时间 到了指定时间以后会失效。(类似Cookie机制) 相对到期也称滑动到期:设置相对过期时间 指定时间内无访问会失效。(类似Session机制) HttpRuntime.Cache与HttpContext.Current.Cache 为同一个对象HttpRuntime.Cache.Add 存在相同...

C# winform ——界面美化技巧

C# winform 界面美化技巧(扁平化设计) 转 关于C#界面美化的一些小技巧在不使用第三方控件如 IrisSkin 的前提下,依然可以对winform做出让人眼前一亮的美化首先,我们先来实现主界面的扁平化 此处分为两个步骤,第一步是更改winform自带的MainForm窗体属性,第二步是添加窗体事件。将主窗体FormBorderStyle更改...

c# winform 智能模糊匹配 输入框

using System;using System.Collections.Generic;using System.ComponentModel;using System.Drawing;using System.Data;using System.Linq;using System.Text;using System.Windows.Forms;usi...

WinForm 异步调用方法

假如要在一个线程中异步执行一个方法,则先创建一个该方法的委托类型,然后CLR会自动为该委托类型定义一个BeginInvoke方法和EndInvoke方法,我们就靠这两个方法异步调用委托类型指向的方法(这句话有点绕口,呵呵)BeginInvoke这个方法用于启动异步调用,该方法具有和要异步执行的方法具有相同的参数列表,只不过又多加了两个参数,多加的那两个参数...