Laden...

Form nachträglich MdiParent zuweisen -> Probleme mit Focus

Erstellt von MrDigi vor 11 Jahren Letzter Beitrag vor 11 Jahren 3.680 Views
M
MrDigi Themenstarter:in
9 Beiträge seit 2007
vor 11 Jahren
Form nachträglich MdiParent zuweisen -> Probleme mit Focus

Hallo,

ich möchte etwas gefühlt ganz einfaches machen.

Aufgabe:
Ein Form soll per Mausklick vom MDI Parent "gelöst"und auch per Mausklick wieder in das Mdi Parent wieder "hinzugefügt" werden können.

Ausgangssituation:
Ich erstelle im ParentForm mehrere Mdi Children (s.u. add_Click). Ich kann danach jedem Child durch Klick irgendwo dessen Form den Fokus geben.

Problem:
Wenn ich nun ein Form löse (button1_Click) und wieder dem Mdi Parent hinzufüge (button2_Click) funktioniert bei allen MDI Children das Fokussieren nur noch durch Klick auf deren Titelzeile. In das Form selbst klicken hat keine Auswirkungen mehr.

Mache ich was falsch ? Ist das ein Bug ? Ein Feature ? ...
Kann ich ein Form nur VOR dem Show() Ereignis einem MdiParent zuweisen ?

Grüße
MrDigi

Beispielapplikation, sehr trivial:
ParentForm hat einen Button zum Erstellen von MDI Childforms:


private void add_Click(object sender, EventArgs e)
        {
            ChildForm f = new ChildForm();
            f.MdiParent = this;
            f.Show();
        }

ChildForm hat 2 Buttons zum Lösen und Hinzufügen:


        private void button1_Click(object sender, EventArgs e)
        {
            this.Hide();
            this.MdiParent = null;
            this.Show();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Hide();
            this.MdiParent = parentForm;
            this.Show();
        }

49.485 Beiträge seit 2005
vor 11 Jahren

Hallo MrDigi,

also die Doku sagt nichts dazu, dass man ein MdiForm wieder lösen kann. Es steht also nichts davon, dass bzw. ob das Zuweisen von null erlaubt ist oder nicht. Eine Garantie, dass es funktionieren muss, gibt es also nicht. Trotzdem würde ich denken, dass es möglich sein müsste. Aber deine bisherigen Ergebnisse sprechen dagegen. Wenn du auf Nummer sicher gehen willst, dann zerstörst du das Fenster, statt es zu lösen, und erzeugst ein neues (mit dem gleichen Inhalt), das du gar nicht erst verbindest.

herbivore

2.187 Beiträge seit 2005
vor 11 Jahren

Hallo,

vor einiger Zeit hatte ich ein ähnliches Problem und folgende Beiträge haben mir geholfen:
Mdi Child Forms functionality does NOT work correctly in Windows Forms
MDI child form does not activate when clicked in client area

Gruß
Juy Juka