【问题标题】:How can i know new MDI form added into parent MDI form?我如何知道添加到父 MDI 表单中的新 MDI 表单?
【发布时间】:2017-03-03 06:57:17
【问题描述】:

我已经创建了一个父表单并为此引发了 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 事件。那么你能建议任何方法来实现这一点吗?

【问题讨论】:

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


【解决方案1】:

我找到了这个问题的解决方案。当通过将 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窗体中

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多