zoukankan      html  css  js  c++  java
  • winform弹出唯一窗体的方法

    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);
            }
        }
  • 相关阅读:
    WEB引入Google思源黑体
    Linux安装最新版Node.js
    JS判断值是否是数字
    高效jQuery的奥秘
    一个Web前端工程师或程序员的发展方向,未来困境及穷途末路
    javascript 模块化 (切记:学习思想)
    学习 正则表达式 js java c# python 通用
    Promise如何解决回调地狱
    VSCode 开发插件 推荐
    js移动端自适应动态设置html的fontsize
  • 原文地址:https://www.cnblogs.com/xkkk/p/5555972.html
Copyright © 2011-2022 走看看