请问窗体的“隐藏”和“关闭”有什么区别? Hide()方法和Close()方法造成的结果有哪些不同? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 分别调试Form2 form = new Form2();form.Show();form.Close();form.Show(); //将报异常和Form2 form = new Form2();form.Show();form.Hide();form.Show();你就清楚两者的关系了 窗体程序是单线程的Close()是关闭 也就是关闭当前线程 退出程序Hide()是隐藏 从另一方面来说也算是关闭 举一个很简单的例子frmLogin frm=new frmLogin();frm.Close();//程序运行结束frm.Hide();//只是隐藏改窗体,但是程序正常运行 Close,比如说,它会通知mdi的父窗口自己已经退出,会设置自己内部一些标志使得控件不再参与windows消息泵的处理流程同时也不再刷新,会从父窗口的children集合中把自己删除掉,通知窗口图标系统关闭(假设在windows系统托盘上注册了图标的话),转移windows系统窗口输入焦点,等等很多事情要做。其实这些东西不可能仅靠死记硬背,对于微软来讲也不可能是靠概要设计去列举所有细节的。细节都是在不断的测试中被加入进来的。而不是最初设计窗体这个概念时就搞出来的。 Hide,隐藏了,但是还在,你看不到。Cllse,关闭了,没了,对象资源完全释放。 你可以在自己的开发中以测试为准,多做预想中的测试用例设计,不要满脑子都是编程序。这样你就不必太早就去在意这类东西,而一旦遇到bug就可以快速重构。比如说,如果你发觉自动注销windows系统托盘上的图标,这是“逻辑设计”中提及的需求,那么就可以去测试,这时候你可能会发觉使用Close很干净利落地实现,而如果使用Hide之后则需要额外写许多代码才能事项注销托盘。那么这时候就轻松自然地使用Close就可以了。没有必要过于死抠概念。(如果你要理解细节,应该基于.net framework的源代码去自己随时查看,不要靠死记硬背) 我有个疑问,form.Close()之后,form既没有被Dispose掉,也没有立即被Finalize掉,为什么会报异常? 占不占据资源什么的我不能很好地理解。一个窗口类它自己的InitializeComponents方法,在它被构造的时候就已经调用,从而这个窗口实例内部的控件也已经被构造。执行Close()方法后,这个窗口示例以及它拥有的控件的资源都释放掉了?也就是说一个TextBox成员中已有的Text不复存在?我再执行Show()方法(假设可以执行,这个我还真不知道),TextBox会被重新构造?假如是真的,我没有在窗口类定义内找到相应的依据。Hide()我可以理解,就相当于看见与看不见的区别。但是Close()对我来说还是有疑点。 说的挺好,这东西看来挺复杂。我就想知道一个事,那就是Close()之后,这窗体实例是否已经准备好要Garbage Collection了?假如不是,那么我再次用Show()之后,里面控件的状态(所有属性和字段的值,以及它们跟踪句柄所指向的内容)会跟以前一样吗?假如是,那么意思就是,这个Close()方法的作用其实就是告诉CLR,这窗口实例你可以GC了? 为什么我写照网上写的设置文件夹权限的代码没有效果? 未知的服务器标记 ajax:CascadingDropDown 编辑GridView时点击文本框弹出一个窗口 求一个正则表达式(过滤html) 一个关于私有构造函数的问题! 请问一个关于数据库连接的问题 如何判断一个文本文件是否存在? 如何定义和使用全局变量 关于系统组合键的问题 节前最后一个大问题,请教一下各位 請問這個怎麼用Array數組完成?? 帮小弟改下程序
form.Show();
form.Close();
form.Show(); //将报异常
和
Form2 form = new Form2();
form.Show();
form.Hide();
form.Show();你就清楚两者的关系了
Close()是关闭 也就是关闭当前线程 退出程序Hide()是隐藏 从另一方面来说也算是关闭
frm.Close();//程序运行结束
frm.Hide();//只是隐藏改窗体,但是程序正常运行
Cllse,关闭了,没了,对象资源完全释放。
你可以在自己的开发中以测试为准,多做预想中的测试用例设计,不要满脑子都是编程序。这样你就不必太早就去在意这类东西,而一旦遇到bug就可以快速重构。比如说,如果你发觉自动注销windows系统托盘上的图标,这是“逻辑设计”中提及的需求,那么就可以去测试,这时候你可能会发觉使用Close很干净利落地实现,而如果使用Hide之后则需要额外写许多代码才能事项注销托盘。那么这时候就轻松自然地使用Close就可以了。没有必要过于死抠概念。(如果你要理解细节,应该基于.net framework的源代码去自己随时查看,不要靠死记硬背)
我有个疑问,form.Close()之后,form既没有被Dispose掉,也没有立即被Finalize掉,为什么会报异常?
一个窗口类它自己的InitializeComponents方法,在它被构造的时候就已经调用,从而这个窗口实例内部的控件也已经被构造。
执行Close()方法后,这个窗口示例以及它拥有的控件的资源都释放掉了?也就是说一个TextBox成员中已有的Text不复存在?我再执行Show()方法(假设可以执行,这个我还真不知道),TextBox会被重新构造?假如是真的,我没有在窗口类定义内找到相应的依据。
Hide()我可以理解,就相当于看见与看不见的区别。但是Close()对我来说还是有疑点。
说的挺好,这东西看来挺复杂。我就想知道一个事,那就是Close()之后,这窗体实例是否已经准备好要Garbage Collection了?假如不是,那么我再次用Show()之后,里面控件的状态(所有属性和字段的值,以及它们跟踪句柄所指向的内容)会跟以前一样吗?假如是,那么意思就是,这个Close()方法的作用其实就是告诉CLR,这窗口实例你可以GC了?