Μια τεχνική είναι να φτιάξεις ένα property τύπου Person στη Form2 και να του δίνεις τιμή πριν δείξεις τη Form2.
Public Class Form2
Sub New()
InitializeComponent()
_activePerson = New Person() With {.Name = "aaa", .Phone = "999"}
End Sub
Private _activePerson As Person
Public Property ActivePerson() As Person
Get
Return _activePerson
End Get
Set(ByVal value As Person)
_activePerson = value
End Set
End Property
End Class
Κατόπιν, στην Form1 θα έχεις κάτι σαν:
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim frmA As Form2 = New Form2
frmA.ShowDialog()
MessageBox.Show(frmA.ActivePerson)
Dim newPerson As Person = New Person With {.Name = "xxxx", .Phone = "0000"}
Dim frmB As Form2 = New Form2
frmB.ActivePerson = newPerson
frmΒ.ShowDialog()
MessageBox.Show(frmB.ActivePerson)
End Sub
End Class
Παρατήρησε ότι στην περίπτωση της frmA, το _activePerson object θα είναι αυτό που έχει κάνει initialize η ίδια φόρμα. Στην περίπτωση της frmB, το _activePerson είναι το newPerson της Form1.
Εναλλακτικά, μπορείς να περάσεις ένα Person object και στον constructor της Form2 ωστόσο το property και πάλι θα το χρειαστείς ώστε να διαβάσεις μετά το τι έχει κάνει ο χρήστης σε αυτό.
Από την άλλη, αν βάλεις να περνάς το Person στον constructor, όπως εδώ
Public Class Form2
Private Sub New()
End Sub
Sub New(ByVal activePerson As Person)
InitializeComponent()
If activePerson Is Nothing Then
_activePerson = New Person() With {.Name = "aaa", .Phone = "999"}
Else
_activePerson = activePerson
End If
End Sub
Private _activePerson As Person
Public Property ActivePerson() As Person
Get
Return _activePerson
End Get
Set(ByVal value As Person)
_activePerson = value
End Set
End Property
End Class
Τότε θα πρέπει υποχρεωτικά να δώσεις ως παράμετρο ένα Person όταν φτιάχνεις το instance της Form2 γιατί θα στο θυμίσει το intellisense, δεν θα σε αφήσει δηλαδή να γράψεις
Dim frmB As Form2 = New Form2()
θα πρέπει να γράψεις
Dim newPerson As Person = New Person With {.Name = "xxxx", .Phone = "0000"}
Dim frmB As Form2 = New Form2(newPerson)
ή
Dim frmB As Form2 = New Form2(Nothing)
Vir prudens non contra ventum mingit