stai facendo effettivamente un bel minestrone....![]()
![]()
![]()
![]()
stai facendo effettivamente un bel minestrone....![]()
![]()
![]()
![]()
se facevi come ti ho detto io dall'inizio saresti qui a chiedere il prossimo questito..
metti nel costruttore di A un riferimento a B
e quando apri il form Acodice:private FormB riferimentoB; public A(FormB padre) { this.riferimentoB = padre; }
E nel form a quando devi richiamare Bcodice:public void tuafunzionecheapreilforma() { FormA istanza = new FormA(this); istanza.ShowDialog(); }
codice:this.riferimentoB.MetodoDiB(paramentri);
lo so tu hai ragione....
ma siccome devo sperimentare le varie soluzioni, non per eleganza di codifica, ma per volontà di imparare una cosa che purtroppo mi serve....
le provo tutte!!!
dal mio immenso libro supercostoso non sono riuscito a capirci nulla...
grazie
Nel primo esempio di codice, usi la parola - padre -
che sarebbe?
messo cosi come lo hai messo tu, mi da un errore....
mi dice che deve possedere una variabile di ritorno (il metodo)
perchè quello è il costruttore di A non un metodo chiamato A..
su un po' di intraprendenza..![]()
scusa ...non è che io sia rinco, e solo che sto dando di testa...ho un sacco di rogne attualemten.
Anzi, vi ringrazio del vostro aiuto....
non riuscivo a capire, dato che messo come lo avevi messo tu pensavo fosse un parametro...
Scusate se ripesco questo thread, ma ho un problema simile ma non ne vengo a capo.Originariamente inviato da U235
...
nel namespace :
ora dentro A metti cio' che vuoi modificare ad esempio dentro un metodo :codice:///come parametri puoi mettere quello che ti pare, anche una struttura o classe ad ok ///qui ho messo string testo come prova di concetto public delegate void Delegato(string testo);
in B aggiungi :codice:///parametri corrispondenti ai parametri del delegato void Modifica(string testo) { this.textbox1.text = testo; }
e nel metodo che scaturira dal cambiamento dei dati (sempre in B ad esempio click del bottone "invia a A"codice:Delegato delegato = null; public event Delegato TestoCambiato { add { this.delegato += value; } remove { this.delegato -= value; } }
ovviamente quando crei B (dentro A) devi aggiungere l'evento e agganciarlo al metodo che ti sei creato (Modifica(string testo))codice:private void button1_Click(object sender, EventArgs e) { if (this.delegato!=null) this.delegato("pippo"); }
codice:B B = new B() B.TestoCambiato += new System.EventHandler(this.Modifica); B.Show();
Ho seguito tutto quanto qua sopra, però, ho aggiunto una modifica in quanto io ho una mdi e 2 form distinte. La mdi chiama la formB che dovrà aggiornare un dato nella form A (richiamabile solo dalla mdi).
In sostanza nella formMDI ho aggiunto un campo che fa riferimento alla FormA,
Il metodo Modifica suggerito dal post sopra, l'ho messo nella formMDI e come metodo va a modificare la FormA per mezzo di una proprietàcodice:... public FormA frm; ...
nella formA:codice:void Modifica(string testo) { frm.AggiornaTesto = testo; }
Sempre nella formMDI dove viene richiamata la formB:codice:public string AggiornaTesto { set { this.textBox1.Text = value; } }
codice:FormB frm = new FormB(); frm.CambiaTesto += new System.EventHandler(this.Modifica); frm.Parent = this; frm.Show();
Ecco, questa parte mi genere un errore in compilazione e, non so come porvi rimedio e non so cosa ho sbagliato. Abbiate pazienza, ma sto cercando d'imparare.
L'errore è:
Graziecodice:Nessun overload per 'Modifica' corrispondente al delegato 'System.EventHandler'
Gli eventi delle classi non si gesticono in quel modo.
Guarda questo esempio:
ma Jena72 o Jena1972??codice:class Class1 { public event ModificaEventHandler Modifica; public delegate void ModificaEventHandler(string testo); public Class1() { } public void RaiseMyevent() { if (Modifica != null) { Modifica("prova"); } } } public partial class Form1 : Form { public Form1() { InitializeComponent(); } public void RefreshUI(string testo) { //Tuo codice } private void button1_Click(object sender, EventArgs e) { Class1 myClass1 = new Class1(); myClass1.Modifica += new Class1.ModificaEventHandler(RefreshUI); myClass1.RaiseMyevent(); } }![]()
Sbagliare è umano, perseverare è diabolico.
Eh.... devo aver fatto un po' di casino. Avevo perso l'account che avevo salvato sul pc che è andato in prepensionamento...
Provo a rivedere come da te suggerito. Con il suggerimento sopra.... non ne vengo a capo.
Grazie