Я всегда передавал делегат во вторую форму, которую можно вызвать, чтобы «передать» значения из второй формы в первую.
Таким образом, вы избегаете любой жесткой связи.
Классическая модель наблюдателя.
Пример реализации выглядит следующим образом:
Добавить подпись делегата в форму Form1. В обработчике щелчка кнопки 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
функцией, которая возвращает нужные значения.