重複建立窗體問題的引出spa
連續單擊添加窗體按鈕,經過普通的在按鈕事件方法中建立窗體,顯示窗體的後果是,咱們會發現,相同的窗體會重複不斷的彈出。代碼以下:調試
//添加窗口事件方法 private void tsmiAddStudent_Click(object sender, EventArgs e) { FrmAddStudent objFrmAddStudent = new FrmAddStudent(); objFrmAddStudent.Show(); }
問題分析:事件單擊,會動態的建立窗體,每次單擊,都會新建窗體並顯示,不關閉,則一直顯示存在。code
解決辦法:將建立的窗體設置爲靜態,使之在內存中惟一存在,每次單擊都調用內存中存在的對象。orm
解決代碼以下:對象
1 //顯示添加窗口 2 public static FrmAddStudent objFrmAddStudent = null;//設置爲全局變量,以便其餘窗體能夠調用 3 private void tsmiAddStudent_Click(object sender, EventArgs e) 4 { 5 if (objFrmAddStudent == null)//沒有窗體對象 6 { 7 objFrmAddStudent = new FrmAddStudent(); //建立窗體對象,new實例化對象 8 objFrmAddStudent.Show();//顯示窗體 9 } 10 else//窗體已經存在了 11 { 12 objFrmAddStudent.Activate();//激活窗體,只能在最小化的時候起做用 13 objFrmAddStudent.WindowState = FormWindowState.Normal;//設置窗體爲正常大小狀態 14 } 15 }
經過上述方法,調試運行確實解決了重複建立窗體的問題,可是當關閉窗體後,再次單擊按鈕,發現窗體不能顯示,端點調試沒有問題,問題在哪呢?blog
雖然說窗體已經關閉,但由於對象是靜態的,窗體關閉,程序沒退出前,此窗體對象一直存在內存中,只是顯示不出來。爲此,須要在窗體關閉的時候,將靜態窗體對象手動設置爲空。對該窗體添加FormClosed事件:該窗體UI→屬性→事件→找到FormClosed→雙擊添加事件並進入事件方法。事件
代碼以下:內存
1 //窗體關閉完執行的事件 2 private void FrmAddStudent_FormClosed(object sender, FormClosedEventArgs e) 3 { 4 FrmMain.objFrmAddStudent = null;//objFrmAddStudent對象在主窗體中聲明 5 }
注意對objFrmAddStudent對象爲全局靜態對象的理解。class