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);
}