新建一工程,添加两个窗体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

解决方案 »

  1.   

    你是把form1作为模态打开的form2;只有当form2正确关闭后才可以退出form1.而你的form2是hide,且cancel设置成了false!
    没关form2,当你关form1时当然要进form2了呀.
    应该:
    Private Sub Form_Unload(Cancel As Integer)
        unload me
        'Cancel = 1
    End Sub
      

  2.   

    form1代码改成这样呢?
    Private Sub Form_Load()
        Me.Show
        Form2.Show ,me
    End Sub
      

  3.   


    你在FORM2的UNLOAD事件中写    
    Me.Hide  'HIDE是隐藏窗体而已,看不见不等于关
    Cancel = 1 '这句就是取消关闭事件
    干什么?你到底是让它关还是不让它关呢?你在FORM2中写的UNLOAD事件本身和你的题意就是有矛盾的呀,现在看出来没有?
      

  4.   

    你把Form2 隐藏了,当前窗体变成了Form1,Cancel = 1又将当前窗体锁定了,关闭窗口已经不再响应鼠标事件,但其它控件可以.比如
    Private Sub Command1_Click()
    End
    End Sub
    就可以把Form1关闭,不是什么Bug
      

  5.   

    End 把Form2也关了,还是不行
      

  6.   

    我的理解:此时的Form2是作为Form1里一个元素来处理的.那么在关闭Form1时肯定会先把它内部的所有元素都先UNLOAD.然后在UNLOAD FORM2时FORM2里用代码禁止UNLOAD,于是FORM1的UNLOAD过程就不会继续下去,也许默认是"只要有一个元素拒绝UNLOAD,则终止整个UNLOAD过程".
      

  7.   

    to 4F
    这个其实是我在做一个程序里遇到的实际问题,form2是一个设置系统变量的,但是设置后form2并不可以真正关闭,因为主窗体要用到上面的控件的值,所以只是将其隐藏,但是在程序退出时遇到问题,点主程序右上角的"X"关闭程序并没有反应,我在主程序的unload事件里面添加了依次卸载各个窗体的代码,仔细检查后发现,点"X"触发的是form2的unload事件,我觉得应该首先触发主窗体的unload事件,这样也比较合乎情理。 不过现在已经改用form2.show解决了,后面不带任何参数就没问题了
      

  8.   

    Private Sub Form_Unload(Cancel As Integer) 
        unload me 
        'Cancel = 1 不要这句就OK了
    End Sub 
    或者在FROM2里的UNLOAD里不写代码也可以.
      

  9.   


      FORM2是以模态窗口打开的  相当于是FORM1的一个子窗口  关闭FORM1时FORM1会先关闭他的子窗口  而FORM2在UNLOAD的时候CANCEL=1 不会被关闭  这样FORM1应该就会终止关闭进程的过程
      
      

  10.   


      这不是VB的BUG  是你程序的BUG
      

  11.   

    楼主说的问题打的确存在,当Cancel = 1 时窗体锁定后怎么解锁的问题.
      

  12.   

    我觉得Form2.show 1的时候所有的命令都传递给了Form2,而当Form2没有退出时Form1的命令还是要执行Form2的命令吧