Il codice sopra è sbagliato: non ha senso fare New per creare un oggetto, assegnarlo a una variabile (frm) e poi sovrascrivere il valore con NewForm1.Originariamente inviato da GhostFire
codice:Private Sub ShowNewForm(ByVal sender As Object, ByVal e As EventArgs) Handles NewToolStripMenuItem.Click, NewToolStripButton.Click, NewWindowToolStripMenuItem.Click Dim frm As New Form() frm = NewForm1 frm.Show() End Sub
Meglio dichiarare semplicemente il Form secondario così:
dove SecondForm è il nome del Form, cioè della sua classe, e SecondFormInstance è il nome della variabile che conterrà il suo riferimento quando la finestra verrà effettivamente creata.codice:Public SecondFormInstance As SecondForm
Nel pulsante di visualizzazione della finestra, per crearla e mostrarla è sufficiente scrivere
Ogni volta che si deve fare riferimento alla finestra o ai suoi membri (es. controlli visuali), occorre farlo attraverso il campo pubblico che contiene il riferimento, cioè SecondFormInstance.codice:Private Sub ShowNewForm(ByVal sender As Object, ByVal e As EventArgs) Handles NewToolStripMenuItem.Click, NewToolStripButton.Click, NewWindowToolStripMenuItem.Click ' Creo il Form se non è stato ancora istanziato If SecondFormInstance Is Nothing Then SecondFormInstance = New SecondForm() End If ' Visualizzo il Form SecondFormInstance.Show() End Sub
In merito a questa implementazione:
è più corretto passare alla finestra secondaria un riferimento a quella chiamante, piuttosto che interagire l'una con l'altra e viceversa tramite membri pubblici: più vi sono elementi accessibili all'esterno, più si riduce l'incapsulazione e si aumentano le possibilità di errori logici.codice:Private Sub cmdInviaDati_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdInviaDati.Click MDIParent1.NewForm1.txtProfessionista.Text = Me.txtNominativo.Text Me.Close() End Sub

Rispondi quotando