这就是您可能缺少的一切:
Class Form1
Private f2 As Form2 ' this is Form1's reference to the
' form2 instance
稍后,当您单击转到 form2 时,您的原始代码只需要稍作调整:
If f2 Is Nothing Then
f2 = New Form2(Me) ' set declared variable to new instance
End If
F2.Show()
Me.Hide()
在本例中,Form1 使用以下方式传递引用之前给你展示的把戏 https://stackoverflow.com/questions/23142865/passing-objects-between-forms使用构造函数:
Sub New(frm As Form1) ' this is in Form2 only
f1 = frm
End Sub
您在 Form1 中不需要它,因为他/它正在创建自己的 f2 对象引用。
原始代码中的主要问题是:Dim Form2 As New Form2
。您每次都会创建一个新的 Form2(我怀疑它驻留在事件或子事件中)。那些新的instances
无法知道之前实例中的控制值。声明F1
or F2
如图所示给出模块/表单级别Scope
.
Dim
声明一个变量及其类型。 f1 的类型为 Form1。如果它是对象变量,则不会创建对象
New
创建对象类型(引用类型)的实例。这直接关系到Sub New
类中的方法。当你使用New
, Sub New
被调用,以便任何需要的特殊事情都可以在那里发生。值类型如Integer
不需要创建或实例化,只需声明。
Where你声明(Dim
) 一个变量决定了它的Scope
。如果您在 Sub 中执行此操作,则变量或对象仅存在于该 sub 中。如果您在表单/类级别执行此操作,则它具有表单/类级别范围。