vb如何完全卸载一个窗体

我已经用timer倒计时使form unload了,为什么form 由重新加载了?我调试的时候发现unload完,form 还在执行未完成的循环,可能是这个原因导致的,怎么完全卸载呢?!!!谢谢!!

Unload Form就是完全卸载一个窗体。
VB使用 Unload 语句来卸载 Form 对象或控件。
其语法: Unload object object 所在处是要卸载的 Form 对象或控件数组元素的名称。
只有在运行时添加到窗体上的控件数组元素才能用 Unload 语句卸载。重新加载被卸载的控件时,其属性会被重新初始化。
在实际应用中可能会出现Unload后窗体仍加载中的情况,出现这个情况多数是卸载窗体后其他窗体或程序代码又调用了被卸载窗体内的东西,这个窗体又会自动加载。要做的就是检查程序代码。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-23
在Unload之前,要先让Timer停止,即Timer1.Enabled=False追问

难道unload不会把form里所有东西都卸载掉吗?为什么还会在unload后继续执行?

追答

你所说的Timer究竟是系统函数Timer还是指Timer控件?

追问

控件,但是form里的循环是用delay来作记时的,timer只是判断是否卸载

追答

不建议用循环来进行延时,因为它是在当前进程执行的,会对进程造成阻塞(用DoEvents是把控制权暂时还给CPU,当前进程仍是处在阻塞状态的)。而Timer控件则是在另一进程执行的,当前进程不会受到影响。
建议你在对窗体进行Unload操作前,要完全关闭窗体内的所有活动对象和进程,因为正如上所述,VB在执行Unload时,必须等待当前进程带阻塞效果的代码完全执行完毕才会真正执行的,这期间如果代码调用了窗体中的某个部件,那么窗体又会被自动调入内存的。
至于具体的原因和问题所在,要看过你的代码才知道。

追问

嗯,我觉得你说的很有道理,可是怎么把timer当延迟的效果去弄呢?比如,我在一个command-click里写label1.caption=“1“,我需要过5秒再继续执行label2.caption=“2“,怎么把timer嵌进去呢

追答

Private Sub Command1_Click()
Label1.Caption = "1"
Timer1.Interval = 5000 '5秒延迟
Timer1.Enabled = True '启动Timer
End Sub

Private Sub Timer1_Timer()
Label1.Caption = "2"
Timer1.Enabled = False '结束Timer
End Sub

本回答被提问者采纳
第2个回答  2014-11-23
设置一个布尔变量当做开关 放在循环内 if bln=true then exit for
要unload form时 设置bln=true追问

Private Sub delay(delaySeconds As Long)
Dim lngFinish As Long

lngFinish = Timer + 2
Do While Timer < lngFinish
DoEvents

Loop
End Sub
调试的时候,unload完他还在做delay里的循环,怎么办

追答

Private Sub delay(delaySeconds As Long)
Dim lngFinish As Long

lngFinish = Timer + 2
Do While Timer < lngFinish
DoEvents
if bln=true then exit do
Loop
End Sub

这个bln设置为全局变量

追问

貌似他说益出。。。

追答

溢出 在哪一行代码

本回答被网友采纳
相似回答