我有两个用户表单(frmDatastation1
和frmDatastation2
)。当用户点击frmDatastation1
上的cmdbutton时,第一个表单将隐藏(frmDatastation.hide
),第二个表单将显示(frmDatastation.show
)。这很好。当用户完成frmDatastation2
后,我想返回frmDatastation1
并卸载frmdatastation2
(以删除所有内容以便稍后再次使用它frmDatastation1
)。但是当我卸载frmDatastation2
时,一切都会关闭(甚至是frmDatastation1
)。
这是frmDatastation2
中的代码:
frmDatastation1.TextBox1.Text = "" 'this is to reset my textbox not sure it's needed
Me.Hide 'hiding frmDatastation2
Unload frmDatastation1
frmDatastation1.Show vbModeless ' to be able to continue with the next step
frmDatastation1.TextBox1.SetFocus
Unload frmDatastation2 'when this line is executed, it closes everything (even frmDatastation1)
答案 0 :(得分:2)
使用对象而不是使用全局/默认实例。
Sub DoSomething()
Dim parentForm As frmDatastation1
Set parentForm = New frmDatastation1
parentForm.Show vbModal
End Sub
没有必要真正Unload
任何东西 - 当执行退出parentForm
并且对象超出范围时,对象引用DoSomething
将会死亡。
Sub ShowChildForm()
Dim childForm As frmDatastation2
Set childForm = New frmDatastation2
childForm.Show vbModal
End Sub
要使两个对象相互“对话”,您需要传递对象引用。假设子表单需要对父表单的引用,它可以具有如下属性:
Private parentForm As frmDatastation1
Public Property Get Parent() As frmDatastation1
Set Parent = parentForm
End Property
Public Property Set Parent(ByVal value As frmDatastation1)
Set parentForm = value
End Property
然后父表单可以执行此操作:
Sub ShowChildForm()
Dim childForm As frmDatastation2
Set childForm = New frmDatastation2
Set childForm.Parent = Me
childForm.Show vbModal
textbox1.Text = childForm.textbox12.Text
End Sub
...虽然子表单可以像这样访问其父表单:
Sub DoSomething()
Me.Caption = Parent.textbox1.Text
End Sub
如果您希望能够访问已关闭但尚未卸载/丢弃的表单的属性,请不要关闭它 - 只需隐藏它(您需要在QueryClose
中实现该行为,以防止在用户“X-out”表单时丢弃该对象。