模态、无模态和默认表单确实显示在表单集合中
运行以下测试项目以查看它的发生:
'project with 2 forms
' form1 with :
' 1 label: name=Label1
' 1 timer: name=Timer1
' 4 command buttons: names are Command1, Command2, Command3, Command4
' form2 with nothing on it
Option Explicit
Private Sub Command1_Click()
Dim frm As New Form2
frm.BackColor = vbRed
frm.Show vbModal
End Sub
Private Sub Command2_Click()
Dim frm As New Form2
frm.BackColor = vbGreen
frm.Show vbModeless, Me
End Sub
Private Sub Command3_Click()
Dim frm As New Form2
frm.Show
End Sub
Private Sub Form_Load()
With Screen
Move .Width / 2, 0, .Width / 2, .Height / 2
End With 'Screen
Command1.Caption = "modal"
Command2.Caption = "modeless"
Command3.Caption = "default"
Command4.Caption = "unload"
With Timer1
.Interval = 1000
.Enabled = True
End With 'Timer1
End Sub
Private Sub Form_Resize()
Dim sngLblWidth As Single, sngLblHeight As Single
Dim sngCmdWidth As Single, sngCmdHeight As Single
sngCmdHeight = 495
sngLblHeight = ScaleHeight - sngCmdHeight
sngLblWidth = ScaleWidth
sngCmdWidth = sngLblWidth / 4
Label1.Move 0, 0, sngLblWidth, sngLblHeight
Command1.Move 0, sngLblHeight, sngCmdWidth, sngCmdHeight
Command2.Move sngCmdWidth, sngLblHeight, sngCmdWidth, sngCmdHeight
Command3.Move 2 * sngCmdWidth, sngLblHeight, sngCmdWidth, sngCmdHeight
Command4.Move 3 * sngCmdWidth, sngLblHeight, sngCmdWidth, sngCmdHeight
End Sub
Private Sub Timer1_Timer()
Dim frm As Form
Dim strShow As String
strShow = CStr(Now)
For Each frm In Forms
strShow = strShow & vbCrLf & frm.Name
Next frm
Label1.Caption = strShow
End Sub
[编辑]
将 3 个命令按钮添加到 form2 并单击它们以测试卸载时会发生什么
在从 ide 运行时对其进行测试,并注意显示模式表单、显示无模式表单(有所有者)和显示默认表单(没有所有者)时的区别..注意“运行”按钮i ide .. 卸载 form1 并显示模型表单时,应用程序保持运行
这是Form2的代码
Option Explicit
Private Sub Command1_Click()
UnloadForms "Form1"
End Sub
Private Sub Command2_Click()
UnloadForms "Form2"
End Sub
Private Sub Command3_Click()
UnloadForms ""
End Sub
Private Sub Form_Load()
Command1.Caption = "Unload Form1"
Command2.Caption = "Unload Form2"
Command3.Caption = "Unload All"
End Sub
Private Sub UnloadForms(strName As String)
Dim frm As Form
For Each frm In Forms
If InStr(frm.Name, strName) > 0 Then
Unload frm
End If
Next frm
End Sub
[编辑 2]
下面是我用来卸载所有表单的子,这个子在一个模块中,所以我可以在任何地方调用它
Public Sub UnloadAll(strExcept As String, blnKeepMDI As Boolean)
Dim frm As Form
'unload all other forms
For Each frm In Forms
Select Case frm.Name
Case "mdiPaneel" 'unload mdi as last
Case "frmMsg" 'dont unload msg unless specified
Case strExcept 'dont unload this if mdi stays
If blnKeepMDI = False Then
Unload frm
End If
Case Else
Unload frm
End Select
Next frm
If blnKeepMDI = False Then
'unload mdi and finish program
Unload mdiPaneel
End If
End Sub