Lanciare metodo su una form di destinazione diversa da quella attiva.

giovedì 19 giugno 2008 - 14.26

AndreaBelmonte Profilo | Newbie

Ciao,
sto sviluppando una form application su framework .Net C# 1.1.

La mia applicazione lancia una serie di form per eseguire diverse tipologie di operazioni.
Avrei necessità, da una precisa form - che esegue degli aggiornamenti dati - di lanciare un metodo che si trova in un'altra delle form aperte, affinchè aggiorni una lista riepilogativa di dati.

Ho provato a rendere questo metodo pubblico, ma mi da problemi nell'utilizzare un datagrid (il metodo aggiorna i contenuti di un datagrid), anche se provo - stupidamente, lo so - a dichiarare il datagrid come public.

Esiste qualche soluzione a questo problema?

Grazie,
Andrea Belmonte
www.andreabelmonte.com

Cteniza Profilo | Guru

Prendi il codice che vuoi eseguire da qualsiasi punto, mettilo in una classe apposita, dichiara il metodo come static.

AndreaBelmonte Profilo | Newbie

Ciao
e grazie per la risposta.
Ho provato a fare quanto mi suggerisci, ma il grosso problema che ho è che mi è impossibile vedere all'interno del metodo static il datagrid che ho nella form che mi interessa.

Ho fatto un paio di prove, rendendo public static il metodo che aggiorna il datagrid, direttamente all'interno del cs del form che ha il controllo, ma mi è impossibile vederlo. In seconda battuta, ho inserito all'interno di una classe il metodo static AggiornaDataGrid, cui passare come parametro il datagrid di destinazione: anche in questo caso, dalle altre form vedo naturalmente il metodo, ma non posso assolutamente fargli "vedere" il datagrid.

Puoi darmi qualche indicazione di più?

Grazie,
Andrea

Andrea Belmonte
www.andreabelmonte.com

Lucifel Profilo | Junior Member

Questo è un problema che ho riscontrato anche io con il framework 1.1. Con quelli successivi gli passi l'oggetto pubblico e te lo aggiornano tranquillamente.

Io ho risolto passandogli la form come parametro. Mi spiego meglio. Metto la datagrid pubblica. Quando apro la form A (quella che chiama il metodo aggiorna gli passo un'istanza della form B, o l'istanza attiva se è già aperta) e quando faccio aggiorna ho già l'elemento quindi:

A.Bottone.click()
{
Aggiorna(this.B.datagrid1)
}

O una cosa del genere. Lo so che non è per niente elegante (anche a me fa un po' "schifo") ma nel framework 1.1 è il meglio che sono riuscito a fare.

Sarebbe ancora meglio se il metodo aggiorna l'avesse la form B così non dovresti nemmeno avere la datagrid pubblica:

A.Bottone.click()
{
this.B.AggiornaDatagrid(...) // dove sui puntini ci sono i parametri che ti servono per aggiornare la datagrid
}

Spero ti sia servito a qualcosa.

Diego
-----------------------------------
Avanti sempre e comunque!
-----------------------------------

AndreaBelmonte Profilo | Newbie

Ciao e grazie.
Proverò sicuramente, anche se a spanne mi sembra di ricordare di aver avuto qualche problema anche nel dichiarare come public il datagrid.
Andrea Belmonte
www.andreabelmonte.com

Cteniza Profilo | Guru

Dipende da come fai la chiamata ma potresti anche definire nella classe un membro shared per la datagridview, membro che dovrai assegnare all'entrata nella form dove esiste.
Questo piuttosto di dichiarare l'intera form come shared.

Enne Profilo | Junior Member

Ho letto un pò in ritardo ma spero di esserti utile ancora.
Faccio l'esempio di 2 Form, Form1 e Form2, dal Form2 vuoi richiamare un metodo (testMethod) che sta in Form1 quindi:


// Form2

public partial class Form2 : Form
{
Form1 form1;

public Form2(Form1 form)
{
InitializeComponent();
form1 = form;
}
}

// Form1

Form2 form2 = new Form2(this);
form2.ShowDialog(); //presuppongo che da form1 tu faccia visualizzare form2

// Ora da Form2 richiami dove ti serve il testMethod (che ovviamente dovrà essere public):

form1.testMethod();

Saluti,
Rocco Verrastro
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5