一、同标题,比如mdi窗体下有mdi子窗体mdi1,mdi2,mdi3
现在如果mdi1打开的话,那么就不能让mdi2,mdi3打开,如何做呢?二、如果要关闭所有的mdi子窗体,除了下面写得方法,还有别的吗?
Public Sub UnloadAllForms(Optional sFormName As String = "")
Dim Form As Form
For Each Form In Forms
If Form.Name <> sFormName Then
Unload Form
Set Form = Nothing
End If
Next Form
End Sub
现在如果mdi1打开的话,那么就不能让mdi2,mdi3打开,如何做呢?二、如果要关闭所有的mdi子窗体,除了下面写得方法,还有别的吗?
Public Sub UnloadAllForms(Optional sFormName As String = "")
Dim Form As Form
For Each Form In Forms
If Form.Name <> sFormName Then
Unload Form
Set Form = Nothing
End If
Next Form
End Sub
Option Explicit
Private Sub mnuTAdd_Click()
Dim newfrm As New Form1
Call Only_One_Child(newfrm)
Set newfrm = Nothing
End Sub
'调用方法,定义一个要显示的窗体传过去,Dim newfrm As New Form1
Private Sub Only_One_Child(ByVal byfrm As Form)
Dim newfrm As Form
Dim i As Long
For Each newfrm In Forms
i = i + 1
Next
If i <= 1 Then
Set newfrm = byfrm
newfrm.Show
End If
Set newfrm = Nothing
End Sub
'关闭子窗体后提示是否退出
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
假定都是通过 MDI 主窗体的菜单来进行操作的。
'MDI 主窗体
Option ExplicitPrivate Sub mnuCloseAll_Click()
While Not Me.ActiveForm Is Nothing
Unload Me.ActiveForm
Wend
End SubPrivate Sub mnuMDI1_Click()
If Me.ActiveForm Is Nothing Then
mdi1.Show
End If
End SubPrivate Sub mnuMDI2_Click()
If Me.ActiveForm Is Nothing Then
mdi2.Show
End If
End SubPrivate Sub mnuMDI3_Click()
If Me.ActiveForm Is Nothing Then
mdi3.Show
End If
End Sub