读书人

MDI子窗体中Unload Me为什么未能触发U

发布时间: 2013-01-09 09:38:15 作者: rapoo

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事件是在关闭子窗体前触发

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

读书人网 >VB

热点推荐