Però in questo caso, il frmFiglio è obbligato a conoscere sia il controllo che il nome del frmPadre, perchè contiene dei riferimenti espliciti ad essi, il che non va molto d'accordo con l'incapsulazione e la riusabilità.
Per intenderci, se un domani volessi usare il frmFiglio in un altro progetto, dovrei andare a modificare la routine frmFiglio_FormClosing.
Non è gravissimo, ma supponiamo di aver utilizzato lo stesso metodo molte volte e su diversi form...
Il lavoro per andare a modificare tutte le routine potrebbe essere non banale.
Diventa più semplice gestire la proprietà (o la variabile) del frmFiglio esclusivamente dal frmPadre.
Nel codice seguente mostro come scrivere e leggere un valore da frmFiglio:
Per semplicità creiamo in frmFiglio una variabile pubblica MyVar
codice:
Public MyVar As String = ""
Da frmPadre, quando apro frmFiglio, posso valorizzare la variabile MyVar, modificarla mentre sono in frmFiglio, e quando chiudo il form rileggo il valore di MyVar modificato:
codice:
Private Sub cmdApriFiglio_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdApriForm2.Click
Dim newForm = New frmFiglio()
REM Passo il valore alla variabile MyVar nel nuovo form
newForm.MyVar = txtVarDaPassare.Text
newForm.ShowDialog()
REM Leggo il valore restituito
txtVarDaPassare.Text = newForm.MyVar
End Sub
Come si può notare, frmFiglio resta indipendente da frmPadre nel senso che se lo uso in un altro progetto non devo apportare alcuna modifica, perchè appunto non esiste alcun riferimento esplicito né al controllo né al nome del form chiamante (frmPadre).
Ciao