Search code examples
vb.netformsshowdialog

Changing TextBox Text of Form1 From Form2


This is my problem...
I have a form (Form1), which is calling another form(Form2). In this Form2, when I close the Form, I want to call a method of Form1, to change values from Form1 components. The method is called, but the components values of Form1 don't change... I guess this is because when I call the method of Form1 from Form2, it is created anothed Form1 instance, and the method it's not executed in Form1 from which I call Form2

Form1 calling Form2

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

Form2 calling method of Form2

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

Solution

  • Pass the original instance of Form1 to the constructor of Form2, like this:

    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
    

    Now in Form1, when you create the Form2 instance you need to pass the instance of Form1, like this:

    Dim frmForm2 As New Form2(Me) 
    frmForm2.ShowDialog()
    

    Note: Me is a reference to the current class, Form1 in this case.