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

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

     
  • 相关阅读:
    epoll示例
    realloc的使用误区
    pyCharm最新激活码(2018激活码)
    python程序打包成.exe
    VS2017下载安装
    C# Cache缓存读取设置
    WPF中展示HTML
    Aspose Word模板使用总结
    js alert(“”)弹框 自定义样式
    利用反射将Model转化为sql
  • 原文地址:https://www.cnblogs.com/allencxw/p/9860498.html
Copyright © 2011-2022 走看看