新建一工程,添加两个窗体form1,form2form1内部代码:
Private Sub Form_Load()
Me.Show
Form2.Show 1
End Subform2内部代码:
Private Sub Form_Unload(Cancel As Integer)
Me.Hide
Cancel = 1
End Sub启动后先关闭form2然后再关闭form1,这时发现根本管不了,单步调试发现form1的unload事件竟然发生在form2里面如果觉得建工程麻烦的话可以直接下载代码:
http://www.symental.com/sfw?f=testbug
Private Sub Form_Load()
Me.Show
Form2.Show 1
End Subform2内部代码:
Private Sub Form_Unload(Cancel As Integer)
Me.Hide
Cancel = 1
End Sub启动后先关闭form2然后再关闭form1,这时发现根本管不了,单步调试发现form1的unload事件竟然发生在form2里面如果觉得建工程麻烦的话可以直接下载代码:
http://www.symental.com/sfw?f=testbug
没关form2,当你关form1时当然要进form2了呀.
应该:
Private Sub Form_Unload(Cancel As Integer)
unload me
'Cancel = 1
End Sub
Private Sub Form_Load()
Me.Show
Form2.Show ,me
End Sub
你在FORM2的UNLOAD事件中写
Me.Hide 'HIDE是隐藏窗体而已,看不见不等于关
Cancel = 1 '这句就是取消关闭事件
干什么?你到底是让它关还是不让它关呢?你在FORM2中写的UNLOAD事件本身和你的题意就是有矛盾的呀,现在看出来没有?
Private Sub Command1_Click()
End
End Sub
就可以把Form1关闭,不是什么Bug
这个其实是我在做一个程序里遇到的实际问题,form2是一个设置系统变量的,但是设置后form2并不可以真正关闭,因为主窗体要用到上面的控件的值,所以只是将其隐藏,但是在程序退出时遇到问题,点主程序右上角的"X"关闭程序并没有反应,我在主程序的unload事件里面添加了依次卸载各个窗体的代码,仔细检查后发现,点"X"触发的是form2的unload事件,我觉得应该首先触发主窗体的unload事件,这样也比较合乎情理。 不过现在已经改用form2.show解决了,后面不带任何参数就没问题了
unload me
'Cancel = 1 不要这句就OK了
End Sub
或者在FROM2里的UNLOAD里不写代码也可以.
FORM2是以模态窗口打开的 相当于是FORM1的一个子窗口 关闭FORM1时FORM1会先关闭他的子窗口 而FORM2在UNLOAD的时候CANCEL=1 不会被关闭 这样FORM1应该就会终止关闭进程的过程
这不是VB的BUG 是你程序的BUG