1、同意 zyl910(910:分儿,我来了!) Private Sub Form_Unload(Cancel As Integer) 'End End Sub 2、请在编译的时候选 P- 代码
在Unload Me 之前 set CoolBar=nothing 试试
在Form_Unload不写代码(如下) Private Sub Form_Unload(Cancel As Integer) 'End End Sub 果然有效,谢了,可是我要在退出时判断一些事件,比如退出前判断改变得设置保存了没有,那么在Form_Unload里不可能不写代码丫?怎么办?而且我的程序不止一个窗体,在Form_Unload里加end才可以保证程序全部退出阿。 另外在Form_Unload里的End前加了set CoolBar=nothing都没有用阿。
现在我的程序改为了: Private Sub Form_Unload(Cancel As Integer) If saveset.Enabled = True Then answer = MsgBox("背景设置还未保存,保存吗?(是-保存,否-不存,取消-恢复默认设置)", vbYesNoCancel + vbInformation, "提示") If answer = vbYes Then saveset_Click Else If answer = vbCancel Then bgimgpath = "own" fontcolorname = "own" saveset_Click End If End If End If If MsgBox("你确定要退出吗?", vbYesNo + vbInformation, "提示") = vbYes Then Cancel = 0 End----------------------!!!!!罪魁祸首!! Else Cancel = 1 End If End Sub --------------- 我发现不用end就不会有事!!!!可是,不用end的话,我的程序有时候会无法退出,就是任务管理器中还会有它在运行。怎么办?有没有可以退出所有窗体的语句??
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的代码,看看是否有问题
用form对象,将所有的窗体一一结束,再end就行了,我以前就遇到过同样的问题。 Dim i As LongFor i = Forms.Count - 1 To 0 Step -1 Unload Forms(i) ' Triggers QueryUnload and Form_Unload Next iIf Forms.Count = 0 Then Close end
Private Sub Form_Unload(Cancel As Integer)
'End
End Sub
2、请在编译的时候选 P- 代码
set CoolBar=nothing
试试
Private Sub Form_Unload(Cancel As Integer)
'End
End Sub
果然有效,谢了,可是我要在退出时判断一些事件,比如退出前判断改变得设置保存了没有,那么在Form_Unload里不可能不写代码丫?怎么办?而且我的程序不止一个窗体,在Form_Unload里加end才可以保证程序全部退出阿。
另外在Form_Unload里的End前加了set CoolBar=nothing都没有用阿。
Private Sub Form_Unload(Cancel As Integer)
If saveset.Enabled = True Then
answer = MsgBox("背景设置还未保存,保存吗?(是-保存,否-不存,取消-恢复默认设置)", vbYesNoCancel + vbInformation, "提示")
If answer = vbYes Then
saveset_Click
Else
If answer = vbCancel Then
bgimgpath = "own"
fontcolorname = "own"
saveset_Click
End If
End If
End If
If MsgBox("你确定要退出吗?", vbYesNo + vbInformation, "提示") = vbYes Then
Cancel = 0
End----------------------!!!!!罪魁祸首!!
Else
Cancel = 1
End If
End Sub
---------------
我发现不用end就不会有事!!!!可是,不用end的话,我的程序有时候会无法退出,就是任务管理器中还会有它在运行。怎么办?有没有可以退出所有窗体的语句??
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的代码,看看是否有问题
调试器,看看调用堆栈,先把问题最后出在哪儿找到。
我估计出现这个问题,还是因为有潜在的循环引用,用的时候没问题,
退出的时候问题就来了。
要不把你的程序给我看看,记住编译时一定要带调试信息。
我的Mail: [email protected]
Dim i As LongFor i = Forms.Count - 1 To 0 Step -1
Unload Forms(i) ' Triggers QueryUnload and Form_Unload
Next iIf Forms.Count = 0 Then Close
end
◇把所有窗体都卸载Unload 窗体
◇在Form_Unload事件中Set frmMain = Nothing (frmMain为主窗体)
◇有些时候End会出问题(如使用了SubClass或者Hook,会导致程序崩溃和系统错误)
dim a as formsfor each a in forms
unload a
if a=nothing then
exit for
end
next
dim a as form