C#Parent和Child中的MDI表单

时间:2011-05-20 19:05:09

标签: c# winforms mdi

我的项目中有3个表单。

  • form1是MDI控制器
  • form2form3是MDI儿童

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

类似于旧MFC的MDI界面:

enter image description here

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

4 个答案:

答案 0 :(得分:5)

首先,确保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的代码中,使用以下内容来处理按钮的click事件以实例化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引发一个表单容器可以挂钩并实例化Form3的事件来解耦Form2和Form3。此示例代码旨在为您提供方向。

答案 1 :(得分:4)

告诉表单它的MdiParent是当前的形式。

  form2 frm = new form2 ();
    frm.MdiParent = this;
    frm.Show();

答案 2 :(得分:0)

    private void homeToolStripMenuItem_Click(object sender, EventArgs e)
    {
        frmHome objfrmHome = frmHome.GetChildInstance();
        objfrmHome.MdiParent = this;
        objfrmHome.WindowState = FormWindowState.Maximized;
        objfrmHome.Show();
        objfrmHome.BringToFront();
    }

然后在您打电话的表格中

    private static frmHome m_SChildform;
    public static frmHome GetChildInstance()
    {
        if (m_SChildform == null) //if not created yet, Create an instance

            m_SChildform = new frmHome();
        return m_SChildform;  //just created or created earlier.Return it

    }

答案 3 :(得分:0)

尝试此功能

public void mdiChild(Form mdiParent, Form mdiChild)
    {
        foreach (Form frm in mdiParent.MdiChildren)
        {
            if (frm.Name == mdiChild.Name)
            {

                frm.Focus();
                return;
            }
        }

        mdiChild.MdiParent = mdiParent;
        mdiChild.Show();

    }
相关问题