晚上逛CSDN論壇的時候,看到C#區有位朋友問“防止MDI子窗體被多次實例化”,我隨即寫了這篇文章。
其實這個問題,就是經典的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;
}
----------------------------------------------------------------------------------------------------------
OK, just easy like this! Enjoy it!