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.Closed 和 Form.Closing 事件。如果在必须执行的其中一个事件中有验证代码,则在调用 Exit 方法之前,应分别为每个打开的窗体调用 Form.Close 方法。 |
解决方法2:
因为上面的方法要每个界面都修改,如果工作量不大,可以考虑。但是我们程序里的查询界面太多了。。。不过幸好,查询界面都继承了Core.BaseForm。
在Core.BaseForm.FormClosing()方法中遍历界面所有控件,将其值保存到一临时文件中。
在Core.BaseForm.Load()方法中打开临时文件,遍历所有控件,为其赋值。
具体代码略。
总结:
Form.Close()这么常用的方法,我竟然也不熟悉。有机会细细体会下MS的设计。多看看别人的代码,或许你会有意想不到的收获!!