假设我有两个名为Form1和Form2的表单.我想从Form1调用Form2中的函数abc().哪一个更好,为什么?
方法1:
'In Form1
Form2.abc()
Run Code Online (Sandbox Code Playgroud)
方法2:
'In Form1
Dim oFrm As New Form2
oFrm.abc()
Run Code Online (Sandbox Code Playgroud)
在程序运行的VB6中,只要您通过表单名称引用表单,VB6就会创建该表单的实例.该实例也被添加到Forms集合中.
您可以使用此代码或其适当的变体来发现已实例化的表单:
Dim frmCurrent As Form
Dim output As String
For Each frmCurrent In Forms
output = output & frmCurrent.Name & vbCrLf
Next
MsgBox output
Run Code Online (Sandbox Code Playgroud)
因此,当您调用Form2.abc()时,您正在新创建的Form2表单实例上调用abc过程(如果它有助于您理解,则可以将单词class替换为表单).
当退出程序时,你可以得到一种错误,程序在内存中闲逛,但在屏幕上看不到,因为你已经关闭了所有可见的表单,但没有关闭通过调用实例化的表单Form2.abc.这导致流行的"关闭所有表单"代码被添加到许多VB6程序的退出过程中:
Private Sub cmdExit_Click()
Dim current As Form
Dim output As String
For Each current In Forms
Unload current
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
当您为变量标注尺寸并为其指定新的Form2实例时,您将根据变量创建一个具有范围的新表单.该实例未添加到Forms集合:
Dim frmNew As New frmTest
frmNew.abc
Dim frmCurrent As Form
Dim output As String
For Each frmCurrent In Forms
output = output & frmCurrent.Name & vbCrLf
Next
MsgBox output 'Does not include frmNew aka frmTest
Run Code Online (Sandbox Code Playgroud)
因此,您的第二种方法通常是更好的方法,因为它不会在Forms集合中创建Form2的实例,或者重用可能会给您带来意外结果的现有实例.