zoukankan      html  css  js  c++  java
  • 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);   这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净。 

    一般情况下不需要给应用程序写退出函数,执行默认退出函数即可,但是有情况还需要用以上几种函数的。

     
  • 相关阅读:
    C#开发微信公众平台-就这么简单(附Demo)
    Newtonsoft.Json高级用法
    C#获取文件的MD5码
    C#动态执行代码
    c#插件式开发
    利用反射执行代码
    yield关键字用法与解析(C# 参考)
    HttpContext.Current.Cache和HttpRuntime.Cache的区别,以及System.Runtime.Caching
    GZip压缩与解压缩
    Asp.Net 请求处理机制
  • 原文地址:https://www.cnblogs.com/allencxw/p/9860498.html
Copyright © 2011-2022 走看看