4 Stimmen

MDI-Formularerkennung, wenn ein untergeordnetes Formular hinzugefügt oder entfernt wird

Gibt es ein Ereignis, das ich verwenden kann, um festzustellen, ob ein untergeordnetes Formular dem übergeordneten MDI-Formular hinzugefügt oder entfernt wurde?

0voto

private void closeToolStripMenuItem1_Click(object sender, EventArgs e)
    {
      List<Form> fm = this.MdiChildren.ToList();
        if(fm!=null && fm.Count>0)
        {
            foreach(Form lfm in fm)
            {
                lfm.Close();
            }
        }
    }

0voto

Valvestino Punkte 342

Da das MdiChildActivate-Ereignis ausgelöst wird, bevor das MDI-Kinderformular tatsächlich geschlossen wird, und daher nicht genügend Informationen vorhanden sind, um zu erkennen, ob ein MDI-Kinderformular tatsächlich aktiviert oder geschlossen ist, habe ich einen anderen Ansatz gewählt, um das Problem zu lösen.

Ich habe festgestellt, dass das ParentChanged-Ereignis auf dem MDI-Unterformular ausgelöst wird, wenn es geschlossen wird.

public class MdiParentForm : Form
{
    // ...

    private Form CreateMdiChildForm()
    {
        var form = new MdiChildForm
        form.ParentChanged += MdiFormParentChangedHandler;
        form.MdiParent = this;
        return form;
    }

    private void MdiFormParentChangedHandler(object sender, EventArgs args)
    {
        var form = sender as Form;
        if (form != null)
        {
            if (form.MdiParent != null)
            {
                // MDI child form will activate
                // ... your code here
            }
            else
            {
                // MDI child form will close
                form.ParentChanged -= MdiFormParentChangedHandler;
                // ... your code here
            }
        }
    }

    // ...
}

-2voto

Robbie Punkte 41

Kürzlich wollte ich feststellen, wann ungefähr KEINE MDI-Kinder geöffnet sind, damit ich ein Panel mit vielen Schaltflächen für "zu erledigende Aufgaben" nur dann anzeigen kann, wenn keine untergeordneten Formulare geöffnet sind. (Ich wollte nur eine Design-Idee ausprobieren).

Meine letztendliche Lösung war elegant einfach - fügen Sie einen Timer auf das übergeordnete Formular und starten Sie den Timer, wenn das MdiChildActivate-Ereignis festgestellt, es war 1 Kind Form geöffnet.

    private void MyForm_MdiChildActivate(object sender, EventArgs e)
    {
        this.panel_Tools.Visible = false;
        if (this.MdiChildren.Count() == 1)
        {
            this.timer_WindowsCounter.Start();
        }
        else
        {
            this.timer_WindowsCounter.Stop();
        }

    }

    private void timer_WindowsCounter_Tick(object sender, EventArgs e)
    {
        if (this.MdiChildren.Count() == 0)
        {
            this.panel_Tools.Visible = true;
            this.timer_WindowsCounter.Stop();
        }
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X