winform弹出唯一窗体的方法

Posted 午后的小巷

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);
        }
    }

 

以上是关于winform弹出唯一窗体的方法的主要内容,如果未能解决你的问题,请参考以下文章

winform窗体点击删除按钮如何弹出确认删除对话框?

winform窗体点击删除按钮,如何弹出确认删除对话框?

C#winForm如何不让同一个窗体显示多次

winform打开唯一窗体构造函数传值

winform点按钮弹出一个窗体,然后上一个窗体关闭,怎么实现?

winform打开唯一窗口构造函数传值