ObjectDisposedException wurde nicht behandelt..!
-
Hallo Leute,
Habe folgendes Problem.
Will von einer Form "Form_1", eine zweite Form "Form_2" öffnen.
Das mache ich so:(Code bei Form_1)
public partial class Form1 : Form { Form2 frm = new Form2(); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { frm.Show(); }
(Code bei Form_2)
public partial class Form1 : Form { Form2 frm = new Form2(); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { frm.Show(); } }
Wenn das Prog. läuft drücke ich auch "button_1" auf "Form_1" und "Form_2" wird geöffnet.
Ich schlisse "Form_2" (drücke entweder auf "button_1" der "Form_2" oder einfach schliessen (X)) und ich drücke wieder auf "button_1" der "Form_1",damit ich wieder "Form_2" öffne.Und hier kommt dei Fehlermeldung..:
ObjectDisposedException wurde nicht behandelt Auf das verworfene Objekt kann nicht zugegriffen werden. Objektname: "Form2".
Was kann ich dagegen machen, und wieso wird "Form_2" denn verworfen?
Ich habe es doch nur mit "this.Close()" geschlossen.P.S.
Wenn mein Code bei "Form_1" so aussehen würde:public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Form2 frm = new Form2(); // <------ frm.Show(); }
kommt keine Fehlermeldung.
AberForm2 frm = new Form2();
kann ich nicht bei "button_1" hineinschreiben, da ich das gleiche Fenster auch von andere Stelle öffnen will.
Hoffe mein Problem ist verständlich geworden.
-
Naja du hast uns erstmal 2mal den selben Code von Form1 gepostet:D Sollte beim zweiten mal wohl eher Form2 sein wenn mich nicht alles täuscht.
Zu deiner Frage: Durch this.Close wird automatisch die Dispose MEthode aufgerufen und dein Objekt ist invalide und die Ressourcen wurden dafür freigegeben, deshalb deine Fehlermeldung.
Um das zu umgehen müsstest du wie du schon gezeigt hast immer ein neues Form erzeugen, oder du wendest das Singleton-Muster auf deine Forms an und schließt das Form nicht komplett sonder versteckst es nur.
-
Firefighter schrieb:
Naja du hast uns erstmal 2mal den selben Code von Form1 gepostet:D Sollte beim zweiten mal wohl eher Form2 sein wenn mich nicht alles täuscht.
Ja genau so sollte es sein...sorry habe mich vertippt.
Firefighter schrieb:
Zu deiner Frage: Durch this.Close wird automatisch die Dispose MEthode aufgerufen und dein Objekt ist invalide und die Ressourcen wurden dafür freigegeben, deshalb deine Fehlermeldung.
Um das zu umgehen müsstest du wie du schon gezeigt hast immer ein neues Form erzeugen, oder du wendest das Singleton-Muster auf deine Forms an und schließt das Form nicht komplett sonder versteckst es nur.Sehr vielen DANK. Mit "this.Hde();" klappt alles wunderbar und für meinem Fall ist das die beste Lösung glaube ich.
DANKE nochmals!