c#桌面應用程序--窗體重複建立問題

重複建立窗體問題的引出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

相關文章
相關標籤/搜索