簡體   English   中英

C#父母與子女中的MDI表單

[英]MDI form in C# Parent And Child

我的項目有3個表格。

  • form1是MDI控制器
  • form2form3是MDI子

如何創建form1作為父級,並創建form2form3作為子級?

類似於舊的MFC的MDI接口:

在此處輸入圖片說明

想象一下form2是父級並且有一個按鈕。 如果單擊,則必須在父窗體( form1 )中打開form3 我該如何設置?

首先,確保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脫鈎。 此示例代碼旨在為您提供指導。

只需告訴表單其MdiParent是當前表單即可。

  form2 frm = new form2 ();
    frm.MdiParent = this;
    frm.Show();
    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

    }

試試這個功能

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();

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM