grazie 1000
grazie 1000
allora se devi fare una cosa "al volo" puoi semplicemente usare nella classe program un void statico tipo :
poi nel codice della prima form fai :codice:public static Form1 f1; [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); f1 = new Form1(); Application.Run(f1); } public static void ChangeForm(object sender, object FormOpen) { Form f = (Form)sender; f.Visible = false; Form fo = (Form)FormOpen; fo.Show(); }
e continui cosi per tutte le form in cascata, per chiudere l'applicazione aggiungi in program :codice:private void backupDatiToolStripMenuItem_Click(object sender, EventArgs e) { Program.ChangeForm(this, new Form2()); }
e lo chiami dall'ultima form ( ovviamente sempre Program.close(); )codice:public static void close() { f1.Close(); }
volendo puoi anche evitare i void suggeriti per la program e lasciare public static il campo f1 e pilotarlo dalle altre form (senza close() ChangeForm()) con Program.f1.Close() e Program.f1.Visible = false ecc...
senti mi potresti dare il file? perchè non ho capito molto bene dove copiare quei codici.grazie
erano solo degli esempi
era per farti capire come gestire le finestre in modo semplice e rapido (ma non il migliore).
devi mettere la prima form (quella che viene avviata nella classe program cioè form1) a visible = false e non chiuderla, puoi usare la stessa procedura che usavi prima, solo che anziechè usare Form.Close() usa Form.Visible = false e quando hai finito chiudi la form (o la rendi visibile di nuovo se devi continuare).
i metodi statici ti servono se devi gestire passaggi di dati (con i limiti del caso) tra le form senza gestire eventi e delegati.
non ho piu' il tuo codice, ma nel caso non riesci lo scarico di nuovo e ti faccio capire meglio.
ok grazie. credo di aver capito. invece di chiudere le form, devo solo farle diventare invisibili.
qulle che gestiscono l'apertura della form successiva, ma se fai gestire l'apertura delle forma da form1 ( di tutte le successive) devi tenere aperta solo quella e le altre le puoi chiudere.
ma per semplicità ti conviene renderle tutte invisibili, tanto non è che ci siano poi tutte queste risorse impegnate!
p.s.
sei uno studente? di dove se non sono indiscreto? (mi puoi rispondere in privato se vuoi)
si sono uno studente di cagliari e sto per andara al liceo scientifico, quindi ho 13 anni. comunque se metto, per esempio, nella form madre questo codice per aprirne una nuova:
e poi inserisco lo stesso codice in un'altra form per gestire quella precedente, per esempio renderla invisibile, e mi dice che entra in un ciclo infinito o qualcosa di simile. oppure come faccio a utilizzare gli eventi di un'altra form dalla form madre???se mi rispondi sei un mitocodice:Form2 f2 = new Form2();non ho ancora capito molto bene come funziona il c#, non so neanche cosa sono le classi e a che cosa servono. ho appena cominciato.
![]()
la parola "mito" non mi piace (credo che non piaccia a nessuno che non lo sia davvero) e sa di presa per il c.
comunque...
e proprio li che li che si usano di piu', scenario :oppure come faccio a utilizzare gli eventi di un'altra form dalla form madre???
f1 (primo form)
f2 (form aperto dentro f1)
in f1 crei f2, poi aggiungi l'evento che ti interessa e allo scaturirsi di quest'ultimo verrà eseguito il codice dentro il metodo che hai creato con la gestione dell'evento in f1
esempio :
chiaramente se non ti è chiaro cosa sia una classe ti viene difficile programmare.codice:public class Form1 : Form { public Form f2; //imposto f2 come campo della classe public Form1() // nel costruttore inizializzo f2 { this.f2 = new Form(); // inizializzo f2 this.f2.Activated += new EventHandler(f2_Activated); // aggiungo l'evento } //metodo che verrà chiamato quando avviene l'evento void f2_Activated(object sender, EventArgs e) { //codice che verra eseguito quando si attiva la f2 } }
prima conosci la teoria e nel frattempo fai pratica!