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); 这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净。
一般情况下不需要给应用程序写退出函数,执行默认退出函数即可,但是有情况还需要用以上几种函数的。
心未老,即奋不顾身!