winform 单例模式

这是一个老问题啦!

单例模式其实就是说:第一次打开一个窗体,第二次打开时,窗体刷新不弹出另一个同样的窗体。

单例模式的原理:用一个静态对象来代表窗体对象,不通过new 来得到窗体对象而是用一个public类型的静态函数来得到窗体;

下面是一个例子:

首先是窗体中的代码:

private static Frm_TableAttribute1 tableAttribute = null;
public bool isShowFirst = false;
private Frm_TableAttribute1() { }

public static Frm_TableAttribute1 GetForm(DataTable importDt, GSOLayer layer, GSOGlobeControl globeControl)
{
if (tableAttribute == null)
{
tableAttribute = new Frm_TableAttribute1(importDt, layer, globeControl);
}
else
{
dt = importDt;
geoLayer = layer;
m_globeControl = globeControl;
}
return tableAttribute;
}

private Frm_TableAttribute1(DataTable importDt)
{
InitializeComponent();
dt = importDt;
}

private void Frm_TableAttribute_Load(object sender, EventArgs e)
{}
void Frm_TableAttribute_Shown(object sender, EventArgs e)
{
isShowFirst = true;
}
public void SetDataTable() //相当于Load事件
{
this.Shown += new EventHandler(Frm_TableAttribute_Shown);//首次调用窗体事件

}

 

然后是调用的代码:

Frm_TableAttribute1  frm_editor = Frm_TableAttribute1.GetForm(table,layer, m_globeControl);
frm_editor.SetDataTable();
if (!frm_editor.isShowFirst)
{
frm_editor.Show(this);
}

posted @ 2013-09-05 16:20  白少伟  阅读(330)  评论(0编辑  收藏  举报