日期:2014-05-19  浏览次数:20968 次

c# 如何防止form重复加载?
在某个函数中
public   ShowForm()
{
Form1   frm   =   new   Form1();
frm.Show();
}

frm是局部变量,不好进行null判断,能否在Form1内部判断,防止Show出两个相同的窗体?

------解决方案--------------------
Application.OpenForms属性可以帮助你解决这个问题。
------解决方案--------------------
bool a = false;
foreach (Form abc in Application.OpenForms)
{
if (abc.Name == "Form2 ")
{
a = true;
break;
}
}
if (!a)
{
Form2 frm = new Form2();
frm.Show();
}
------解决方案--------------------
其实这个问题,就是经典的23种设计模式中的单件模式(singleton),下面用c#实现之:

首先我们有2个windows form,主窗体叫form1,子窗体叫childform。在主窗体中加入一menu,用来实例化子窗体,我们在form1.cs中写入下代码:

private static childform childform; //静态变量,保存唯一实例

private void menuitem2_click(object sender, system.eventargs e)
{
childform childform = getchildform(); //获取子窗体对象
childform.show(); //显示之
}

private childform getchildform()
{
//先后次序不能错,前一个条件用来判断是否是第一次,后一个条件用来判断子窗体是否被关闭了
if( childform == null || childform.isdisposed )
{ //第一次实例化也好,被关了也好,都重新实例化
childform = new childform();
childform.mdiparent = this;
}

return childform;
}