这是我的问题
我有一个表单(Form1),它正在调用另一个表单。在这个Form2中,当我关闭Form时,我想调用Form1的方法,以更改Form1组件的值。方法被调用,但Form1的组件值不会改变。。。我想这是因为当我从Form2调用Form1的方法时,它是在Form1实例中创建的,而它不是在我调用Form2的Form1中执行的方法
Form1调用Form2
Private Sub btnCallForm_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCallForm.Click
frmForm2.ShowDialog()
End Sub
Form2 的Form2调用方法
Private Sub btnOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOk.Click
frmForm1.ChangeValues()
End Sub
将Form1
的原始实例传递给Form2
的构造函数,如下所示:
Public Class Form2 Inherits Form
Dim theForm1 As Form1
Public Sub New(form1 As Form1)
theForm1 = form1
End Sub
Private Sub btnOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOk.Click
' Call instance of Form1 passed in to change the values here
theForm1.ChangeValues()
End Sub
End Class
现在在Form1
中,当您创建Form2
实例时,您需要传递Form1
的实例,如下所示:
Dim frmForm2 As New Form2(Me)
frmForm2.ShowDialog()
注意:
Me
是对当前类的引用,在本例中为Form1
。
如果您没有在ChangeValues()中返回任何值,那么只需在ShowDialog()行之后调用它即可。那么Form2根本不需要知道Form1!。。。
Form1调用Form2,然后更新自身:
Private Sub btnCallForm_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCallForm.Click
frmForm2.ShowDialog() ' <-- code stops here until frmForm2 is dismissed
Me.ChangeValues() ' <-- we're already here, update the values!
End Sub