2013-12-11 71 views
0

这是我的问题...
我有一个窗体(Form1),它调用另一个窗体(Form2)。在这个Form2中,当我关闭表单时,我想调用Form1的方法来更改Form1组件的值。该方法被调用,但Form1的组件值不会改变...我想这是因为当我从Form2调用Form1的方法时,它创建了一个Form1实例,并且它不在Form1中执行的方法从中我叫窗体2

Form1中调用Form2的从Form2更改Form1的TextBox文本

Private Sub btnCallForm_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCallForm.Click 
    frmForm2.ShowDialog() 
End Sub 

窗体2调用窗体2

的方法
Private Sub btnOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOk.Click 
    frmForm1.ChangeValues() 
End Sub 

回答

2

传递的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在这种情况下。

+0

非常感谢您......这工作得很好。 – user1600801

0

如果你没有在ChangeValues(通过任何值),然后简单地把它后ShowDialog的()线。然后窗体2并不需要了解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