我如何知道添加到父MDI表单中的新MDI表单?

时间:2017-03-03 06:57:17

标签: c# winforms windows-forms-designer mdi mdichild

我创建了一个父表单并为此引发了ControlAdded事件。并且还为此父表单将属性IsMdiContainer设置为true。然后,如果我创建一个名为ChildForm1和ChildForm2的新表单,如下面的代码,

public partial class ParentForm : Form
{
  public ParentForm()
  {
    InitializeComponent();
    this.ControlAdded += Form1_ControlAdded;
    this.IsMdiContainer = true;

    Form ChildForm1 = new Form();           
    ChildForm1.MdiParent = this;
    ChildForm1.Show();

    Form ChildForm2 = new Form();       
    ChildForm2.MdiParent = this;
    ChildForm2.Show();
  }

  void Form1_ControlAdded(object sender, ControlEventArgs e)
  {
    MessageBox.Show("Control Added" + e.Control.Name);
  }
}

在上面的代码中,在将子表单添加到父表单时调试代码时,它不会引发ControlAdded事件。所以,请你提出任何方法来实现这个目标吗?

1 个答案:

答案 0 :(得分:2)

我找到了这个问题的解决方案。通过将IsMdiContainer设置为true将ParentForm标记为MdiContainer时,会引发ParentForm.ControlAdded事件以添加" MdiClient"控制到父表格。因此,当将MdiClient添加到父MDI表单时,我们可以为MdiClient控件引发ControlAdded事件,如下所示,

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

我们需要像下面一样提高MdiClient.ControlAdded,

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

默认情况下, MDI子窗体将以父窗体的形式添加到MdiClient 的控件集合中。因此,当将ChildForm.MdiParent值设置为Parent表单时,MdiClient的 ControlAdded事件将引发

void MdiClient_ControlAdded(object sender, ControlEventArgs e)
{

}

因此,通过使用上述方法,我们可以知道添加到父MDI表单中的子MDI表单