在FORM控件中又如下方法:
form.visible = false
form.hide
unload form
以上方法均能实现隐藏FORM的功能,请问有何区别?

解决方案 »

  1.   

    form.visible = false和
    form.hide是相同的窗体保持在内存中,只是不可见。
    而unload form是将窗体实例从内存中卸载出去。
      

  2.   


    Unload 语句
       从内存中卸载窗体或控件。语法Unload objectobject 所在处是要卸载的 Form 对象或控件数组元素的名称。说明当所占内存另有它用,或需要重新设置窗体、控件的属性为初始值时,就有必要卸载窗体或控件。在卸载窗体前,会发生 Query_Unload 事件过程,然后是 Form_Unload 事件过程。在其中任一过程中设置 cancel 参数为 True 可防止窗体被卸载。若为 MDIForm 对象,先发生 MDIForm 对象的 Query_Unload 事件过程,接着是各 MDI 子窗体 的 Query_Unload 事件过程和 Form_Unload 事件过程,最后是 MDIForm 对象的 Form_Unload 事件过程。当窗体卸载之后,所有在运行时 放到该窗体上的控件都不再是可访问的。在设计时放到该窗体上的控件将保持不变;但是,当窗体重新加载时,在运行时对这些控件及其属性的任何更改将丢失。所有对于窗体属性的更改也将丢失。对窗体上任何控件的访问会导致窗体重新加载。注意 在卸载窗体时,只有显示的部件被卸载。和该窗体模块相关联的代码还保持在内存中。只有在运行时添加到窗体上的控件数组元素才能用 Unload 语句卸载。重新加载被卸载的控件时,其属性会被重新初始化。
      

  3.   

    假设Form1(主窗体)有一下代码代码:Dim x As Form2Private Sub Command1_Click()
        Set x = New Form2
        
        Load x
        x.Visible = True
    End SubPrivate Sub Command2_Click()
        Unload x
    End SubPrivate Sub Command3_Click()
        x.Visible = False
    End Sub点击command1创建一个Form2的实例,然后分别点击command2关闭窗体和点击command3关闭窗体,结果是点击command2程序会退出,而command3不会,这是因为点击command2窗体x已经被卸载了。
      

  4.   

    如果该窗口的内容在以后的程序中还要引用的话,可以使用:窗口.Hide
    如果想让窗口从内存中移去的话,可以使用:Unload 窗体名
    至于:窗口.Hide和窗口.Visible=False两种方法都是实现同样的功能,所以使用哪一种就随你的习惯了.
      

  5.   

    上面的同仁基本上已经讲清楚了,但还漏掉了一点:那就是Unload只是将窗体本身卸掉,但并不一定会激发Terminate事件,也就是说Unload之后,窗体的变量区还没有被摧毁。例如:
    Form1中
    dim i as integer
    sub Form_load()中
       i=30end sub然后如果现在将Form1Unload再在另一个窗体或模块中进行如下操作
    debug.print form1.i
    这时你会发现输出结果为30,而不是0