Form.Close你知道多少?

今天想做保存查询界面的功能,接着就让我重新认识了Form.Close。

 

需求:

想要做到在主界面中点击查询时,出现的查询界面所示条件与上次调用一致。

 

解决方法1

 

参照别人的方法:

在主界面MainForm中声明QueryForm  qf = null;

MainForm的查询按钮方法内:

        private void Query(object sender,EventArgs e)

        {

            if (qf == null)

            {

                qf = new QueryForm();

                qf.StartPosition =FormStartPosition.CenterParent;

            }

            qf.ShowDialog();

            this.navigatorPlus1.QuerySql =qf.Sql;

        }

 

这样上次的查询条件就复原出来了。

 

令我感到神奇的是Form.Close()方法,彻底颠覆了我的认识,以前以为调用之后就在内存中释放掉了。

在查阅MSDN后,才觉得原来这么常用的方法,我也了解的不够,好好学习!!

-------------------------------MSDN------------------------------

Form.Close 方法

备注

窗体关闭后,关闭在该对象内创建的所有资源并且释放该窗体。通过处理 Closing 事件,并设置作为参数传递给事件处理程序的 CancelEventArgs 的 Cancel属性,可以防止在运行时关闭窗体。如果要关闭的窗体是应用程序的启动窗体,则该应用程序结束。

在以下两种情况下调用 Close 不会释放窗体:(1) 窗体是多文档界面 (MDI) 应用程序的一部分且是不可见的;(2) 您是使用 ShowDialog 显示的该窗体。在这些情况下,需要手动调用 Dispose 来将窗体的所有控件都标记为需要进行垃圾回收。

注意:

在显示为无模式窗口的 Form 上调用 Close 方法时,不能调用 Show 方法使窗体可见,因为窗体的资源已被释放。若要隐藏窗体然后又使其可见,请使用 Control.Hide 方法。

警告:

.NET Framework 2.0 之前,当调用 Application.Exit 方法以退出应用程序时,不会引发 Form.ClosedForm.Closing 事件。如果在必须执行的其中一个事件中有验证代码,则在调用 Exit 方法之前,应分别为每个打开的窗体调用 Form.Close 方法。

 

解决方法2

因为上面的方法要每个界面都修改,如果工作量不大,可以考虑。但是我们程序里的查询界面太多了。。。不过幸好,查询界面都继承了Core.BaseForm

 

Core.BaseForm.FormClosing()方法中遍历界面所有控件,将其值保存到一临时文件中。

Core.BaseForm.Load()方法中打开临时文件,遍历所有控件,为其赋值。

 

具体代码略。

 

 

 

 

总结:

Form.Close()这么常用的方法,我竟然也不熟悉。有机会细细体会下MS的设计。多看看别人的代码,或许你会有意想不到的收获!!

posted on 2010-01-29 17:32  Black Bat  阅读(1994)  评论(0编辑  收藏  举报