正在做一个多文档同时打开的小程序,自然用到MDI。
打开文档的子窗体名称为frmNote,当打开文档时,用下面的代码'为了方便管理子窗体,将它们的引用放在Wins数组中
Set Wins(Index) = New frmNote
Wins(Index).Show
在子窗体中打开文档,菜单都在主窗体上,当单击主窗体的菜单“关闭 Ctrl-W”时,就关闭显示在最前方的子窗体,从MDI主窗体调用子窗体的一个过程:'没有直接Unload Wins(Index),因为有其他方面的考虑
Public Sub CloseMe()
   Unload Me
End Sub
Private Sub Form_Unload(Cancel As Integer)
    MsgBox "Note Form_Unload"
End Sub
Private Sub Form_QueryUnload(Cancel As Integer,UnloadMode As Integer)
    MsgBox "Note Form_QueryUnload"
End Sub但是奇怪的是,执行相应操作后并没有弹出应该弹出的消息框,只有点子窗体的叉号时才能弹出。求解!

解决方案 »

  1.   


    Option ExplicitPrivate Sub MDIForm_Unload(Cancel As Integer)
                Dim frm As Form
                Dim i As Long            If MsgBox("确定要退出系统吗?", vbYesNo, App.Title) = vbYes Then
                    For Each frm In Forms
                        If Not frm Is Nothing Then
                            Unload frm
                        End If
                    Next
                End If            Set frm = Nothing
    End Sub'Private Sub MDIForm_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    '            Dim frm As Form
    '            Dim i As Long
    '
    '            If MsgBox("确定要退出系统吗?", vbYesNo, App.Title) = vbYes Then
    '                For Each frm In Forms
    '                    i = i + 1
    '                    Debug.Print i
    '                    If Not frm Is Nothing Then
    '                        Unload frm
    '                    End If
    '                Next
    '            End If
    '
    '            Set frm = Nothing
    'End SubPrivate Sub mnuFAdd_Click()
            Dim newfrm As New Form1
            
            newfrm.Show
            
            Set newfrm = Nothing
    End Sub
    Unload是在关闭所有子窗体后触发,而Query_Unload事件是在关闭子窗体前触发子窗体的会触发,这要看你定义的子窗体对象是什么,你关闭的对象是不是你定义的对象。
      

  2.   

    二楼对我很有启发。问题出在我调用的不是New出来的那个对象。