我的项目中有 3 个表格。

  • form1 是 MDI Controller
  • form2form3 是 MDI 子代

  • 如何将 form1 创建为父级,将 form2form3 创建为子级?

    类似于旧 MFC 的 MDI 接口(interface):

    c# - C# Parent 和 Child 中的 MDI 形式-LMLPHP

    想象一下 form2 是父级并且有一个按钮。如果单击,它必须在父表单 ( form3 ) 中打开 form1。我该如何设置?

    最佳答案

    首先,确保 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;
    

    在 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;
            }
        }
    }
    

    需要注意的是,这段代码真的很快而且很脏。它有几个不受欢迎的地方,比如 Form2 和 Form3 的耦合(以及无用的类名 Form1、Form2 和 Form3)。理想情况下,您可以通过从 Form2 引发事件来分离 Form2 和 Form3,您的表单容器可以挂接到该事件并实例化 Form3。此示例代码旨在为您提供指导。

    关于c# - C# Parent 和 Child 中的 MDI 形式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6076526/

    10-13 02:05