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?

7voto

Chris Holmes Punkte 11104

Ja. Auf Ihrem Haupt-MDI-Formular, Draht bis zu der MdiChildActivated Event.

Etwa so:

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            this.MdiChildActivate += new EventHandler(Form1_MdiChildActivate);
        }

        void Form1_MdiChildActivate(object sender, EventArgs e)
        {
            MessageBox.Show("Activated");
        }

        private void addToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form form2 = new Form2();
            form2.MdiParent = this;
            form2.Show();
        }
    }

Und dieses Ereignis wird ausgelöst, wenn das untergeordnete Formular aktiviert oder deaktiviert wird.

4voto

lc. Punkte 109470

Verdrahten Sie die MdiChildActivate Ereignis und führen eine Liste der anerkannten Kinder. Wenn ein neues Formular aktiviert wird, verdrahten Sie auch das FormClosed Veranstaltung.

private List<Form> ChildFormList = new List<Form>();

private void MyForm_MdiChildActivate(object sender, EventArgs e)
{
    Form f = this.ActiveMdiChild;

    if (f == null)
    {
        //the last child form was just closed
        return;
    }

    if (!ChildFormList.Contains(f))
    {
        //a new child form was created
        ChildFormList.Add(f);
        f.FormClosed += new FormClosedEventHandler(ChildFormClosed);
    }
    else
    {
        //activated existing form
    }
}

private void ChildFormClosed(object sender, FormClosedEventArgs e)
{
    //a child form was closed
    Form f = (Form)sender;
    ChildFormList.Remove(f);
}

2voto

casperOne Punkte 72238

Nein, die gibt es nicht. Sie müssten Form unterklassifizieren und spezifische Ereignisse aussetzen, die angeben, wann das Kind hinzugefügt wird, und dann alle Anhänge von Kindformularen durch eine Methode leiten, die das Kindformular verdrahtet und das Ereignis auslöst.

1voto

Ryan Buddicom Punkte 1081

Ich erkannte, dies ist viele Jahre zu spät jedoch als die Antworten hier half mir dies zu lösen ich dachte, ich würde erwähnen, dies funktioniert gut mit dem MdiChildren-Array in .net 4. Das einzige, was Sie tun müssen, ist zu überprüfen, ob das Formular entsorgt oder entsorgt zu sagen, wenn seine Schließung.

d. h:

    private void frmContainer_MdiChildActivate(object sender, EventArgs e)
    {
        tabWindows.RefreshLayout(this.MdiChildren.ToList());
    }

    public void RefreshLayout(List<Form> forms)
    {
        this.nextButtonLeft = 1;
        panel1.Controls.Clear();
        foreach (Form frm in forms)
        {
            if (!(frm.Disposing || frm.IsDisposed)) { addButton(frm); }
        }
    }

1voto

Jagadeesan Punkte 183

Ja, Sie können das Hinzufügen von Formularen in MDI-Formularen leicht erkennen.

Wenn die Markierung ParentForm als MdiContainer durch Setzen des IsMdiContainers auf true, die ParentForm.ControlAdded Ereignis für das Hinzufügen des Steuerelements "MdiClient" zum übergeordneten Formular ausgelöst. Wenn Sie also MdiClient zum übergeordneten MDI-Formular hinzufügen, können wir das Ereignis ControlAdded für das MdiClient-Steuerelement auslösen wie unten dargestellt,

  public ParentForm()
  {
    InitializeComponent();
    this.ControlAdded += Form1_ControlAdded;
    this.IsMdiContainer = true;

Wir müssen die MdiClient.ControlAdded wie die unten zu erhöhen,

    void Form1_ControlAdded(object sender, ControlEventArgs e)
      {
           if(e.Control is MdiClient)
                e.Control.ControlAdded += MdiClient_ControlAdded;

      }

Standardmäßig wird die MDI-Child-Formulare werden in die Controls-Sammlung des MdiClient aufgenommen in Elternform. Wenn Sie also den Wert ChildForm.MdiParent als Parent-Formular festlegen, wird die ControlAdded-Ereignis für den MdiClient wird ausgelöst .

void MdiClient_ControlAdded(object sender, ControlEventArgs e)
{

}

Mit der oben beschriebenen Methode können Sie also kennen die untergeordneten MDI-Formulare, die den übergeordneten MDI-Formularen hinzugefügt wurden . So können Sie das ControlRemoved-Ereignis für das MdiClient-Steuerelement hinzufügen, um zu erfahren, welche untergeordneten Formulare aus dem MDI-Formular entfernt wurden.

Ich hoffe, das hilft Ihnen weiter.

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