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

标签 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 事件。那么您能建议什么方法来实现这一目标吗?

最佳答案

我找到了这个问题的答案。当通过将 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 值设置为父窗体时,将引发 MdiClient 的 ControlAdded 事件

void MdiClient_ControlAdded(object sender, ControlEventArgs e)
{

}

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

关于c# - 我如何知道新的 MDI 表单已添加到父 MDI 表单中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42572559/

相关文章:

c# - 将线程安全的 UI 访问器保持在 c# 中的单独类中

.net - WinForms 音量 slider /轨迹栏用户控制

c# - Visual Studio 2013 - 窗体 "Live"预览

c# - lucene 2.9.2.2 一个很奇怪的问题,不能搜索关键字 "a",其他的可以

c# - 在我的类中将图像控件绑定(bind)到 BitmapImage

c# - WPF 绑定(bind)控件在运行时的宽度

c# - 获取跨线程操作无效

c# - VS 设计时错误 - 类型 'ICustomType[]' 的对象无法转换为类型 'ICustomType[]'

c# - using 和 await using 有什么区别?我如何决定使用哪一个?