说我有2种形式命名,Form 1和Form。我想从在Form1窗体2调用一个函数ABC()。哪一个更好,为什么?
方法1:
'In Form1
Form2.abc()
方法2:
'In Form1
Dim oFrm As New Form2
oFrm.abc()
在VB6当程序运行时,只要你通过它的形式名字VB6引用窗体创建窗体的实例。该实例也被添加到Forms集合。
可以发现哪些形式已经被实例化使用此代码或其适当的变体:
Dim frmCurrent As Form
Dim output As String
For Each frmCurrent In Forms
output = output & frmCurrent.Name & vbCrLf
Next
MsgBox output
所以,当你调用Form2.abc()你正在呼吁Form 2窗体的新创建的实例的ABC程序(可以替代形式词类如果它可以帮助你理解)。
当谈到时间,退出程序,你可以得到一个类型的错误,该程序是挂在内存中,但因为你已经关闭了所有可见的形式,但不是通过像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
当您维度变量,并分配给它,你是根据变量创建具有作用域的新形式的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
因此,你的第二个方法是通常最好的一个,因为它没有在Forms集合创建窗体2的实例或重用exisiting情况下,可能会给你一个意想不到的结果。
如果您将只具有窗体2的一个实例,那么就使用方法1。
如果你需要一个以上的实例或预期日益需要超过1个实例,然后使用方法2。
因为你问这个问题,我假设你有窗口2已经加载,所以我会直接调用函数(选项1)
这也取决于你的函数的性质..它与窗口2干涉?它从窗口2使用数据? ....如果让我将直接调用该函数
如果它是一个全球性的功能,我不会把它放在窗口2,但在一个模块中
如果要加载的Form2新实例,并让用户与交互,那么我会去的选项2
第一种方法是好的,如果你知道窗体2已经加载,并使用functionName()可以在任何情况下全球范围内调用。第二种方法是最好的,如果你只需要执行哪些尚未加载Form2的特定功能。但是,你需要注意的内存泄漏:
调用使用Form2
将执行以下操作从Form2.FunctionName()
功能:
1-检查Form2
装?如果不是,它会首先装载。 2- FunctionName()
执行-3- Form2
将保留在存储器中,直到它被具体地卸载。
你将不得不清理,通过手动卸载窗体2
Unload Form2
否则,当你认为你已经关闭Form1
和你结束程序,Form2
已装入,并且您的可执行文件的过程中已经存在的任务管理器。
调用FunctionName()
使用
Dim oFrm as New Form2
oFrm.FunctionName()
将确保加载窗体2的实例(在你的代码的本地环境),然后执行此功能,但你仍然需要卸载它,当你被用它做:
Unload oFrm
否则,你的程序将导致内存泄漏在第一种情况。
改变私人Sub Form_Load()
公共Sub Form_Load()
,则可以从第二个形式调用它
例如,从窗口2要拨打Form1中form_load()
应该使用:调用form1.form_load()