MDI子窗体中Unload Me为什么未能触发Unload事件和QueryUnload事件
MDI子窗体中Unload Me为何未能触发Unload事件和QueryUnload事件
正在做一个多文档同时打开的小程序,自然用到MDI。
打开文档的子窗体名称为frmNote,当打开文档时,用下面的代码
在子窗体中打开文档,菜单都在主窗体上,当单击主窗体的菜单“关闭 Ctrl-W”时,就关闭显示在最前方的子窗体,从MDI主窗体调用子窗体的一个过程:
但是奇怪的是,执行相应操作后并没有弹出应该弹出的消息框,只有点子窗体的叉号时才能弹出。
求解!
------解决方案--------------------
正在做一个多文档同时打开的小程序,自然用到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