背景:點擊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); 這是最徹底的退出方式,不管什么線程都被強制退出,把程序結束的很干凈。
一般情況下不需要給應用程序寫退出函數,執行默認退出函數即可,但是有情況還需要用以上幾種函數的。
