c# 窗口關閉方法


背景:點擊datagridview某條信息彈出信息詳情窗口,當連續點擊時需要關閉之前的詳情窗口。

實現方式:

父窗口中 全局創建子窗口(MsgDetailFrm  ): MsgDetailFrm deFrm = new MsgDetailFrm();

在datagridview的雙擊事件中:

        private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (deFrm==null)
            {
                deFrm = new MsgDetailFrm();
            }
            deFrm.Show();
        }

但在實際操作時,點擊詳情窗口關閉,再次點擊信息類表中某條信息時,報錯,查看原因:

關閉窗口不為空!

也就是關閉窗口后, 

deFrm!=null

但調用

deFrm.Show();時報錯


修改:

全局變量中: MsgDetailFrm deFrm;

deFrm = null;
deFrm = new MsgDetailFrm();

在調用deForm時強制為null,重新實例化

 

細想之后,發現還是對窗口的關閉認識不清,以及不當的編程習慣造成。

解決方法:

1.在關閉窗口時釋放窗口資源的同時,也將變量置為null;

2.換用徹底關閉窗口的方法。

補充:窗口關閉的幾種方法比較

1.this.Close();   只是關閉當前窗口,若不是主窗體的話,是無法退出程序的,另外若有托管線程(非主線程),也無法干凈地退出;

2.Application.Exit();  強制所有消息中止,退出所有的窗體,但是若有托管線程(非主線程),也無法干凈地退出;

3.Application.ExitThread(); 強制中止調用線程上的所有消息,同樣面臨其它線程無法正確退出的問題;

4.System.Environment.Exit(0);   這是最徹底的退出方式,不管什么線程都被強制退出,把程序結束的很干凈。 

一般情況下不需要給應用程序寫退出函數,執行默認退出函數即可,但是有情況還需要用以上幾種函數的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM