auf das verworfene Objekt kann nicht zugegriffen werden

exiter28

Erfahrenes Mitglied
Hallo,

vielleicht kann mir einer von Euch helfen?
ich habe ein MidiParent indem eine Form (childform) erstellt wird.
Also zur Laufzeit wird eine childform erstellt, das funktioniert auch soweit gut,
nur wenn ich die childform schließe und dann wieder versuche eine zu öffnen,
bekomme ich die Meldung: "auf das verworfene Objekt kann nicht zugegriffen werden"

hier mal ein Codeausschnitt:

Code:
    public partial class MDIParent1 : Form
    {
        private int childFormNumber = 0;
        private int codeFormNumber = 0;
        public int x,y;
        
        public MDIParent1()
        {
            InitializeComponent();
        }

        Form childForm = new Form();
        TextBox txtDienst = new TextBox();

        Button cb1 = new Button();

        private void ShowNewForm(object sender, EventArgs e)
        {

            childForm.MdiParent = this;
            childForm.Text = "Eingabe ..." ;
                
            txtDienst.Location = new System.Drawing.Point(25, 25);
            txtDienst.Size = new System.Drawing.Size(200,15);
            txtDienst.MaxLength = 50;
            txtDienst.TextAlign = HorizontalAlignment.Center;

            cb1.Text = "Speichern";
            cb1.Location = new System.Drawing.Point(25, 225);
            cb1.Cursor = Cursors.Hand;
            cb1.Click += new EventHandler(cb1_Click);
            cb1.MouseEnter += new EventHandler(cb1_MouseEnter);
            cb1.MouseLeave += new EventHandler(cb1_MouseLeave);
 
            childForm.Controls.Add(txtDienst);
            
            childForm.Controls.Add(cb1);

            childForm.Show();
        }

bei childForm.Show(); hängt es dann...

Kann mir vielleicht einer von Euch einen kleinen Tipp geben?

Danke schon mal!
 

Nico Graichen

Erfahrenes Mitglied
Hi

Du erzeugst nur einmal eine neue Instanz deiner ChildForm.
In der Methode "ShowNewForm" gehst du davon aus, dass die genutzte Instanz immer da ist. Wenn du ein Fenster schließt geht aber auch diese aber verloren.
Du solltest also deine ChildForm immer dann instanzieren, wenn du sie benötigst und diese noch nicht vorhanden ist

Zu dem solltest du die Controls dafür nicht außerhalb erzeugen. Du kannst dadurch Ring-Referenzen erzeugen, die zu Memory Leaks führen. --> Controls im Parent deklarieren und instanzieren
 

exiter28

Erfahrenes Mitglied
Hi Nico,

Dank Dir!

ich hab jetzt die new Form mit in die Methode "ShowNewForm" reingenommen (und auch den Button, usw..). Jetzt junktioniert das ganze :)