I always passed the delegate to the second form, which can be called to "return" the values from the second form to the first.
This way you avoid tight communication.
Classic observer pattern.
An example implementation is as follows:
Form1. Click1 Form1 Form2 Form1. Form2 :
'Form1.vb
Public Delegate Sub delPassData(ByVal text As TextBox)
Private Sub btnSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSend.Click
Dim frm As Form2 = New Form2
Dim del As delPassData = New delPassData(AddressOf frm.funData)
del(Me.textBox1)
frm.Show()
End Sub
Form2 , . textBox1 label1.
'Form2.vb
Public Sub funData(ByVal text As TextBox)
label1.Text = text.Text
End Sub
Form1, funData , .