Hide()方法和Close()方法造成的结果有哪些不同?

解决方案 »

  1.   

    分别调试Form2 form = new Form2();
    form.Show();
    form.Close();
    form.Show(); //将报异常

    Form2 form = new Form2();
    form.Show();
    form.Hide();
    form.Show();你就清楚两者的关系了
      

  2.   

    窗体程序是单线程的
    Close()是关闭 也就是关闭当前线程 退出程序Hide()是隐藏 从另一方面来说也算是关闭 
      

  3.   

    举一个很简单的例子frmLogin frm=new frmLogin();
    frm.Close();//程序运行结束
    frm.Hide();//只是隐藏改窗体,但是程序正常运行
      

  4.   

    Close,比如说,它会通知mdi的父窗口自己已经退出,会设置自己内部一些标志使得控件不再参与windows消息泵的处理流程同时也不再刷新,会从父窗口的children集合中把自己删除掉,通知窗口图标系统关闭(假设在windows系统托盘上注册了图标的话),转移windows系统窗口输入焦点,等等很多事情要做。其实这些东西不可能仅靠死记硬背,对于微软来讲也不可能是靠概要设计去列举所有细节的。细节都是在不断的测试中被加入进来的。而不是最初设计窗体这个概念时就搞出来的。
      

  5.   

    Hide,隐藏了,但是还在,你看不到。
    Cllse,关闭了,没了,对象资源完全释放。
      

  6.   


    你可以在自己的开发中以测试为准,多做预想中的测试用例设计,不要满脑子都是编程序。这样你就不必太早就去在意这类东西,而一旦遇到bug就可以快速重构。比如说,如果你发觉自动注销windows系统托盘上的图标,这是“逻辑设计”中提及的需求,那么就可以去测试,这时候你可能会发觉使用Close很干净利落地实现,而如果使用Hide之后则需要额外写许多代码才能事项注销托盘。那么这时候就轻松自然地使用Close就可以了。没有必要过于死抠概念。(如果你要理解细节,应该基于.net framework的源代码去自己随时查看,不要靠死记硬背)
      

  7.   


    我有个疑问,form.Close()之后,form既没有被Dispose掉,也没有立即被Finalize掉,为什么会报异常?
      

  8.   

    占不占据资源什么的我不能很好地理解。
    一个窗口类它自己的InitializeComponents方法,在它被构造的时候就已经调用,从而这个窗口实例内部的控件也已经被构造。
    执行Close()方法后,这个窗口示例以及它拥有的控件的资源都释放掉了?也就是说一个TextBox成员中已有的Text不复存在?我再执行Show()方法(假设可以执行,这个我还真不知道),TextBox会被重新构造?假如是真的,我没有在窗口类定义内找到相应的依据。
    Hide()我可以理解,就相当于看见与看不见的区别。但是Close()对我来说还是有疑点。
      

  9.   


    说的挺好,这东西看来挺复杂。我就想知道一个事,那就是Close()之后,这窗体实例是否已经准备好要Garbage Collection了?假如不是,那么我再次用Show()之后,里面控件的状态(所有属性和字段的值,以及它们跟踪句柄所指向的内容)会跟以前一样吗?假如是,那么意思就是,这个Close()方法的作用其实就是告诉CLR,这窗口实例你可以GC了?