Per ottenere questo risultato, utilizzeremo un riferimento all'istanza di FormA, che verrà passato a FormB attraverso il suo costruttore.
1. Dichiarazione del metodo nella FormA
Nella form principale, che chiameremo FormA, creiamo un metodo denominato CaricaDati.
Il metodo deve essere dichiarato con il modificatore di accesso public, in modo da poter essere richiamato anche dall'esterno della classe.
Di seguito riportiamo un esempio di implementazione:
C#
public void CaricaDati()
{
try
{
//Codice
}
catch (Exception ex)
{
Utility.MessaggioErrore("Errore durante il caricamento
dell'applicativo." + ex.Message);
}
}
2. Dichiarazione del riferimento a FormA nella FormB
Nella seconda form, denominata FormB, dichiariamo un campo privato che conterrà il riferimento all'istanza di FormA.
C#
private Form1?
frmPrincipale;
Il simbolo ? indica che il campo può contenere anche un valore null. Questa sintassi è utilizzabile nei progetti C# che supportano i tipi di riferimento nullable.
3. Passaggio del riferimento tramite il costruttore
Sempre all'interno di FormB, aggiungiamo un costruttore che riceve come parametro il riferimento a FormA.
C#
public FormB(FormA frm_Principale)
{
InitializeComponent();
frmPrincipale = frm_Principale;
}
In questo modo, quando viene creata un'istanza di FormB, possiamo passarle il riferimento alla form principale.
Nota: il parametro del costruttore deve essere di tipo FormA, così da poter accedere ai metodi pubblici definiti in questa classe.
4. Richiamo del metodo dalla FormB
A questo punto, nell'evento Click di un pulsante presente in FormB, possiamo richiamare il metodo CaricaDati() della form principale.
C#
if
(frmPrincipale != null)
frmPrincipale.CaricaDati ();
Prima di eseguire il metodo, verifichiamo che il riferimento a FormA non sia null.
Se il riferimento è valido, il metodo CaricaDati() viene eseguito sull'istanza di FormA che abbiamo ricevuto tramite il costruttore.
5. Apertura di FormB dalla FormA
Infine, torniamo in FormA e modifichiamo il codice che apre la seconda form, passando this al suo costruttore.
C#
using (FormB frmB = new FormB(this))
{
frmB.ShowDialog();
}
Cursor.Current
= Cursors.Default;
La parola chiave this rappresenta l'istanza corrente di FormA. In questo modo, FormB riceve esattamente il riferimento alla form dalla quale viene aperta.
Abbiamo inoltre utilizzato using per garantire il rilascio delle risorse di FormB al termine del suo utilizzo e finally per ripristinare il cursore anche se si verifica un'eccezione.
Conclusioni
Come abbiamo visto, per richiamare un metodo di una form da un'altra form in C# è possibile passare il riferimento alla form principale attraverso il costruttore della seconda form.
Questo approccio permette di accedere ai metodi pubblici dell'istanza ricevuta senza dover creare una nuova istanza della form principale.
È una soluzione semplice e utile quando si lavora con applicazioni Windows Forms e si desidera far interagire due form tra loro.
Le opere pubblicate in questo blog sono sotto la licenza Creative Commons. Attribuzione- No commerciale e no derivate.
Nessun commento:
Posta un commento