首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

MDI子窗体中Unload Me为什么未能触发Unload事件和QueryUnload事件

2013-01-09 
MDI子窗体中Unload Me为何未能触发Unload事件和QueryUnload事件正在做一个多文档同时打开的小程序,自然用

MDI子窗体中Unload Me为何未能触发Unload事件和QueryUnload事件
正在做一个多文档同时打开的小程序,自然用到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

但是奇怪的是,执行相应操作后并没有弹出应该弹出的消息框,只有点子窗体的叉号时才能弹出。

求解!
[解决办法]

Option Explicit

Private 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 Sub

Private Sub mnuFAdd_Click()
        Dim newfrm As New Form1
        
        newfrm.Show
        
        Set newfrm = Nothing
End Sub


Unload是在关闭所有子窗体后触发,而Query_Unload事件是在关闭子窗体前触发

子窗体的会触发,这要看你定义的子窗体对象是什么,你关闭的对象是不是你定义的对象。

热点排行