假设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已经被卸载了。
上面的同仁基本上已经讲清楚了,但还漏掉了一点:那就是Unload只是将窗体本身卸掉,但并不一定会激发Terminate事件,也就是说Unload之后,窗体的变量区还没有被摧毁。例如: Form1中 dim i as integer sub Form_load()中 i=30end sub然后如果现在将Form1Unload再在另一个窗体或模块中进行如下操作 debug.print form1.i 这时你会发现输出结果为30,而不是0
form.hide是相同的窗体保持在内存中,只是不可见。
而unload form是将窗体实例从内存中卸载出去。
Unload 语句
从内存中卸载窗体或控件。语法Unload objectobject 所在处是要卸载的 Form 对象或控件数组元素的名称。说明当所占内存另有它用,或需要重新设置窗体、控件的属性为初始值时,就有必要卸载窗体或控件。在卸载窗体前,会发生 Query_Unload 事件过程,然后是 Form_Unload 事件过程。在其中任一过程中设置 cancel 参数为 True 可防止窗体被卸载。若为 MDIForm 对象,先发生 MDIForm 对象的 Query_Unload 事件过程,接着是各 MDI 子窗体 的 Query_Unload 事件过程和 Form_Unload 事件过程,最后是 MDIForm 对象的 Form_Unload 事件过程。当窗体卸载之后,所有在运行时 放到该窗体上的控件都不再是可访问的。在设计时放到该窗体上的控件将保持不变;但是,当窗体重新加载时,在运行时对这些控件及其属性的任何更改将丢失。所有对于窗体属性的更改也将丢失。对窗体上任何控件的访问会导致窗体重新加载。注意 在卸载窗体时,只有显示的部件被卸载。和该窗体模块相关联的代码还保持在内存中。只有在运行时添加到窗体上的控件数组元素才能用 Unload 语句卸载。重新加载被卸载的控件时,其属性会被重新初始化。
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已经被卸载了。
如果想让窗口从内存中移去的话,可以使用:Unload 窗体名
至于:窗口.Hide和窗口.Visible=False两种方法都是实现同样的功能,所以使用哪一种就随你的习惯了.
Form1中
dim i as integer
sub Form_load()中
i=30end sub然后如果现在将Form1Unload再在另一个窗体或模块中进行如下操作
debug.print form1.i
这时你会发现输出结果为30,而不是0