C#Parent和Child中的MDI表单

use*_*274 3 c# mdi winforms

我的项目中有3个表单.

  • form1 是MDI控制器
  • form2并且form3是MDI儿童

如何创建form1为家长和form2form3儿童?

像旧的MFC的MDI接口:

在此输入图像描述

想象一下form2是父母,并有一个按钮.如果单击,则必须form3以父窗体(form1)打开.我该如何设置?

bit*_*ise 6

首先,确保将Form1 IsMdiContainer设置为true.

然后实例化Form1和Form2,将Form1设置为Form2的MdiParent:

// Form1.IsMdiContainer should be true
Form1 form1 = new Form1();

// This automatically adds form2 into form1's MdiChildren collection
Form2 form2 = new Form2();
form2.MdiParent = form1;
Run Code Online (Sandbox Code Playgroud)

在Form2的代码中,具有类似以下内容来处理按钮的单击事件以实例化Form3.

public class Form2 : Form {
    // Include as data member so we only instantiate one Form3
    Form3 _form3;

    public Form2() {
        InitializeComponent();
        Button1.Click += new EventHandler(Button1_Click);
    }

    private void Button1_Click(object sender, EventArgs e) {
        if(_form3 == null) {
            _form3 = new Form3();
            // Set Form3's parent to be Form1
            _form3.MdiParent = this.MdiParent;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

作为一对笔记,这段代码真的很快而且很脏.有几个不受欢迎的事情,比如Form2和Form3的耦合(以及无用的类名Form1,Form2和Form3).理想情况下,您可以通过从Form2引发一个表单容器可以挂钩并实例化Form3的事件来解耦Form2和Form3.此示例代码旨在为您提供方向.