Private Sub MDIForm_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Dim sureq As Integer
sureq = MsgBox("真的要退出?", vbYesNo + 32, "请确认...")
If sureq = 6 Then
Cancel = 0
'''
end
'''
Else
Cancel = -1
End If
End Sub
Dim sureq As Integer
sureq = MsgBox("真的要退出?", vbYesNo + 32, "请确认...")
If sureq = 6 Then
Cancel = 0
'''
end
'''
Else
Cancel = -1
End If
End Sub
cancel=0
if MsgBox("真的要退出?", vbYesNo + 32, "请确认...")=vbNo then cancel=1
End Sub
goto exit sub
if MsgBox("真的要退出?", vbYesNo + 32, "请确认...")=VbYes then End 'cancel=1
End Sub
end虽然可以强行退出程序,可是还是必须找到根本原因来解决,
有可能你的其他窗体还驻留在内存,有一个初学者常犯的错误是导致这种情况的最常见原因:
假如是按command1退出,一般我们这样写:private sub command1_click()
unload me
end sub但是,假如unload me后面还有代码会怎样呢?你可以试一下private sub command1_click()
unload me
msgbox "test"
end sub你会发现unload me以后代码还在继续往下执行,直到进程结束(end sub)再看下面的代码:
private sub command1_click()
unload me
command1.visible = true
end sub你把它放在一个新的工程里试一下,可以发现点了按钮后,窗体并未退出内存,虽然不可见,这是什么原因呢?
原来,执行unload me时,确实退出了窗体,但接下来的语句又调用了窗体上的控件,引起窗体重新加载.有时候我们编写的程序,有时退出非常的慢,莫名其妙地退不干净,或者退出后还占用一些资源,甚至还会有一些莫名其妙的错误,其实很多都是这些简单的错误,不经意的造成的.所以,正确的方法:
unload me
exit sub我们平时编程的时候要养成这样的习惯,随时在unload me后面加exit sub当我们的程序莫名其妙地退不出时,简单的加一个end并不是好的习惯,
你可以这样调试:
暂停程序执行,在立即窗口输入
?forms(0).name
就能看到哪个form还在内存里,然后就检查一下这个form的代码,看看是否有问题