PDA

View Full Version : [C#]Problemi vari MDI


RaouL_BennetH
20-11-2008, 11:54
Ciao a tutti :)

In un'applicazione ho un form padre che carica di volta in volta i suoi figli.

Ora, ho questo tipo di problema:

Uno di questi child form (formLista), contiene una lista, mediante la quale attraverso un'azione, devo caricare i dati contenuti in questa lista su di un altro form figlio(formDettaglio).

Il problema è che se carico 'formDettaglio' dal form principale, a livello di UI tutto è coerente: formDettaglio viene caricato 'dentro' il form principale;
se invece formDettaglio viene caricato da formLista, ovviamente mi viene visto come un form a se stante.

Supponendo che i form siano:

MainForm
FormLista
FormDettaglio

non ho problemi a caricare FormDettaglio da MainForm;
Ho problemi a caricarlo da FormLista.

E' che non riesco ad immaginare come caricarlo da FormLista se non con:

FormDettaglio detail = new FormDettaglio();
detail.Show();


Attendo speranzoso un vostro aiuto.

RaouL.

:)

gugoXX
20-11-2008, 12:15
FormLista deve informare FormPadre che deve rinfrescare e mostrare FormDettaglio.
(mediante evento e delegate, cosi' sei Thread Safe)

RaouL_BennetH
20-11-2008, 13:12
Grazie gugoXX. :)

Oltre a ciò che sto leggendo su msdn, avresti qualche link a portata di mano più esplicativo per il mio caso?


RaouL.

MarcoGG
20-11-2008, 14:17
Il problema è che se carico 'formDettaglio' dal form principale, a livello di UI tutto è coerente: formDettaglio viene caricato 'dentro' il form principale;
se invece formDettaglio viene caricato da formLista, ovviamente mi viene visto come un form a se stante.

Supponendo che i form siano:

MainForm
FormLista
FormDettaglio

non ho problemi a caricare FormDettaglio da MainForm;
Ho problemi a caricarlo da FormLista.

E' che non riesco ad immaginare come caricarlo da FormLista se non con:

FormDettaglio detail = new FormDettaglio();
detail.Show();


E così ?
FormDettaglio detail = new FormDettaglio();
detail.MdiParent = MainForm.ActiveForm ;
detail.Show();

gugoXX
20-11-2008, 14:21
Grazie gugoXX. :)

Oltre a ciò che sto leggendo su msdn, avresti qualche link a portata di mano più esplicativo per il mio caso?


RaouL.

Dunque, cerca "C# event delegate" su google, penso che troverai molto. Se puoi e se ti trova qualcosa vai ovviamente sulla MSDN o su CodeProject.

Comunque puoi riassumere cosi'

// Sulla form Lista
public delegate int ChiamaDettaglioHandler(string a, int b, altriparametri);
public event ChiamaDettaglioHandler ChiamaDettaglio;

...
...
//Dove Serve che apri la FormDettaglio
int ret = ChiamaDettaglio("pippo",14, ....);



////
//Sulla form Padre, immediatamente dopo la costruzione dell'istanza di FormLista si chiami FormListaInstance

FormLista FormListaInstance=new FormLista();
FormListaInstance.ChiamaDettaglio+=new FormLista.ChiamaDettaglioHandler(funzione);


////
public int funzione(string a,int b,altri parametri)
{
//Qui apri la formDettaglio, usando gli eventuali a,b e gli altri parametri passato dalla FormLista
// E restituendo l'intero (o qualsiasi altra cosa, anche void) che puo' essere usato
// Dal chiamante, ovvero sempre dalla Form Lista
}

RaouL_BennetH
20-11-2008, 14:39
Perfetto. L'esempio sono riuscito a comprenderlo e, effettuando un piccolo test con due forms funziona perfettamente.

Ora cerco di arrivare da solo a capire come fare a popolare il 'formDettaglio' con i dati provenienti dal formLista .

Nel frattempo :

:ave: gugoXX


RaouL.