点击菜单弹出窗口,再点击还弹出窗口

时间:2022-09-19 23:40:07
WinForm做的窗口,今天发现一个问题。
点击菜单的某项弹出窗口,窗口不关闭,再次点击菜单的这项,还弹出窗口
请问如何判断窗口已打开,点击就不打开窗口了。

9 个解决方案

#1


定义该窗口为全局变量,执行new操作前先判断该变量是否为空
类似如下代码

private Form form;
public void btn_click()
{
        //判断该窗口是否已经打开
        if(form == null)
        {
                //实例化新窗口,并显示
        }
}

另外,关闭该窗口时记得将该变量设置为null

#2


你让弹出的窗口 ShowDialog() 就可以了。

#3


引用 1 楼 liaoxing168 的回复:
定义该窗口为全局变量,执行new操作前先判断该变量是否为空
类似如下代码

private Form form;
public void btn_click()
{
        //判断该窗口是否已经打开
        if(form == null)
        {
                //实例化新窗口,并显示
        }
}

另外,关闭该窗口时记得将该变量设置为null


软件的菜单有很多需要弹出窗口
如果这样,需要很多全局变量,不合适。

#4


引用 2 楼 duanzi_peng 的回复:
你让弹出的窗口 ShowDialog() 就可以了。


有的我使用的form.showdialog()
还有很多不能用这个
要用form.show()
还是不行

#5


你可以遍历窗体,判断是否已经存在

#6


引用 3 楼 u012488787 的回复:
Quote: 引用 1 楼 liaoxing168 的回复:

定义该窗口为全局变量,执行new操作前先判断该变量是否为空
类似如下代码

private Form form;
public void btn_click()
{
        //判断该窗口是否已经打开
        if(form == null)
        {
                //实例化新窗口,并显示
        }
}

另外,关闭该窗口时记得将该变量设置为null


软件的菜单有很多需要弹出窗口
如果这样,需要很多全局变量,不合适。

写成公用方法。这个的确需要每个窗口对象,没有合适不合适。

#7


或者简单点
弄个全局的List<Form>
打开一个就加进list里
然后再点击的时候判断里面是否已经有这个窗体,如果有,是否已经被释放,释放就移除掉

#8



Form1 form;
  foreach (Form frm in Application.OpenForms)
            {
                if (frm.Name ==form.Name)
                {
                    frm.Activate();
                }
                else
                {
                    // 实例化,并show
                  form = new Form1();
                  form.Show();
                }
            }

#9


这个问题,基本解决了.
方法:
Form1 form=new Form1();
foreach(form frm in Application.openforms)
{
if(frm.name==form.name)
{
frm.activate();
return;
}

}
form.show();


感谢你们的回复。

#1


定义该窗口为全局变量,执行new操作前先判断该变量是否为空
类似如下代码

private Form form;
public void btn_click()
{
        //判断该窗口是否已经打开
        if(form == null)
        {
                //实例化新窗口,并显示
        }
}

另外,关闭该窗口时记得将该变量设置为null

#2


你让弹出的窗口 ShowDialog() 就可以了。

#3


引用 1 楼 liaoxing168 的回复:
定义该窗口为全局变量,执行new操作前先判断该变量是否为空
类似如下代码

private Form form;
public void btn_click()
{
        //判断该窗口是否已经打开
        if(form == null)
        {
                //实例化新窗口,并显示
        }
}

另外,关闭该窗口时记得将该变量设置为null


软件的菜单有很多需要弹出窗口
如果这样,需要很多全局变量,不合适。

#4


引用 2 楼 duanzi_peng 的回复:
你让弹出的窗口 ShowDialog() 就可以了。


有的我使用的form.showdialog()
还有很多不能用这个
要用form.show()
还是不行

#5


你可以遍历窗体,判断是否已经存在

#6


引用 3 楼 u012488787 的回复:
Quote: 引用 1 楼 liaoxing168 的回复:

定义该窗口为全局变量,执行new操作前先判断该变量是否为空
类似如下代码

private Form form;
public void btn_click()
{
        //判断该窗口是否已经打开
        if(form == null)
        {
                //实例化新窗口,并显示
        }
}

另外,关闭该窗口时记得将该变量设置为null


软件的菜单有很多需要弹出窗口
如果这样,需要很多全局变量,不合适。

写成公用方法。这个的确需要每个窗口对象,没有合适不合适。

#7


或者简单点
弄个全局的List<Form>
打开一个就加进list里
然后再点击的时候判断里面是否已经有这个窗体,如果有,是否已经被释放,释放就移除掉

#8



Form1 form;
  foreach (Form frm in Application.OpenForms)
            {
                if (frm.Name ==form.Name)
                {
                    frm.Activate();
                }
                else
                {
                    // 实例化,并show
                  form = new Form1();
                  form.Show();
                }
            }

#9


这个问题,基本解决了.
方法:
Form1 form=new Form1();
foreach(form frm in Application.openforms)
{
if(frm.name==form.name)
{
frm.activate();
return;
}

}
form.show();


感谢你们的回复。