共用方式為


如何:建立 MDI 子表單

MDI 子表單是多文檔介面 (MDI) 應用程式 的基本元素 ,因為這些表單是使用者互動的中心。

在下列程式中,您將使用 Visual Studio 建立顯示控制項的 MDI 子表單 RichTextBox ,類似于大部分的文字處理應用程式。 System.Windows.Forms藉由替代控制項與其他控制項,例如 DataGridView 控制項,或控制項的混合,您可以建立具有各種可能性的 MDI 子視窗(以及延伸模組的 MDI 應用程式)。

建立 MDI 子表單

  1. 在 Visual Studio 中建立新的 Windows Forms 應用程式專案。 在表單的 [屬性] 視窗中,將其 IsMdiContainer 屬性設定為 true ,並將其 WindowsState 屬性設定為 Maximized

    如此即可將表單指定為子視窗的 MDI 容器。

  2. MenuStrip 控制項從 [Toolbox] 拖曳至表單。 將其 Text 屬性設定為 File

  3. 按一下 Items 屬性旁的 省略號 (...),然後按一下 [新增 ] 以新增兩個子工具等量功能表項目。 將 Text 這些專案的 屬性設定為 [新增 ] 和 [視窗 ]。

  4. 在 [方案總管] 中,於專案上按一下滑鼠右鍵,然後選取 [新增]>[新增項目]

  5. 在 [ 新增專案 ] 對話方塊中,從 [範本 ] 窗格選取 [Windows Form ] (在 Visual Basic 或 Visual C# 中為 [Windows Form] 或 [.NET] [Visual C++]。 在 [ 名稱] 方塊中,將表單 命名為 Form2 。 選取 [ 開啟 ] 將表單新增至專案。

    注意

    您在這個步驟中所建立的 MDI 子表單是標準的 Windows Form。 因此,它具有 Opacity 屬性,可讓您控制表單的透明度。 然而,Opacity 屬性是專為最上層視窗而設計的。 請勿搭配 MDI 子表單使用這個屬性,這樣做可能會發生繪製問題。

    這個表單將是您的 MDI 子表單範本。

    Windows Forms 設計工具 隨即開啟,顯示 Form2

  6. 從 [ 工具箱 ] 將 RichTextBox 控制項拖曳 至表單。

  7. 在 [ 屬性] 視窗中,將 Anchor 屬性設定為 Top、Left ,並將 Dock 屬性設定為 Fill

    如此一來,RichTextBox 控制項就會完全填滿 MDI 子表單區域,即使表單大小重新調整過亦可。

  8. 按兩下 [ 新增 ] 功能表項目,為其建立 Click 事件處理常式。

  9. 在使用者按一下 [新增 ] 功能表項目時,插入類似下列的程式碼,以建立新的 MDI 子表單。

    注意

    在下列範例中,事件處理常式會處理 MenuItem2Click 事件。 請注意,根據您的應用程式架構細節,新的 功能表項目可能不是 MenuItem2

    Protected Sub MDIChildNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click
       Dim NewMDIChild As New Form2()
       'Set the Parent Form of the Child window.
       NewMDIChild.MdiParent = Me
       'Display the new form.
       NewMDIChild.Show()
    End Sub
    
    protected void MDIChildNew_Click(object sender, System.EventArgs e){
       Form2 newMDIChild = new Form2();
       // Set the Parent Form of the Child window.
       newMDIChild.MdiParent = this;
       // Display the new form.
       newMDIChild.Show();
    }
    
    private:
       void menuItem2_Click(System::Object ^ sender,
          System::EventArgs ^ e)
       {
          Form2^ newMDIChild = gcnew Form2();
          // Set the Parent Form of the Child window.
          newMDIChild->MdiParent = this;
          // Display the new form.
          newMDIChild->Show();
       }
    

    在 C++ 中,在 Form1.h 頂端新增下列 #include 指示詞:

    #include "Form2.h"
    
  10. 在 [屬性] 視窗頂端的 下拉式清單中,選取對應至 [檔案 ] 功能表列的功能表區,並將 屬性設定 MdiWindowListItem 為 [視窗 ToolStripMenuItem ]。

    這可讓 [ 視窗 ] 功能表維護開啟的 MDI 子視窗清單,並具有使用中子視窗旁的核取記號。

  11. F5 執行應用程式。 從 [ 檔案] 功能表中選取 [新增 ],即可建立新的 MDI 子表單,這會在 [視窗 ] 功能表項目中 持續 追蹤。

    注意

    MainMenu 元件 (這個元件通常具有功能表項目的功能表結構) 的 MDI 父表單中,開啟同樣具有 MainMenu 元件 (這個元件通常具有功能表項目的功能表結構) 的 MDI 子表單時,如果您已設定 MergeType 屬性 (並選擇性地設定 MergeOrder 屬性),則功能表項目會自動合併。 將上述兩個 MainMenuMergeType 屬性和子表單的所有功能表項目設定為 MergeItems。 接著再設定 MergeOrder 屬性,如此一來,來自兩個功能表的功能表項目即可依指定順序出現。 再者,請記住,在關閉 MDI 父表單時,每個 MDI 子表單都會在 MDI 父表單的 Closing 事件引發前,先引發 Closing 事件。 只取消 MDI 子表單的 Closing 事件並無法避免引發 MDI 父表單的 Closing 事件;不過,MDI 父表單之 Closing 事件的 CancelEventArgs 引數現在會設定為 true。 您可以將 CancelEventArgs 引數設定為 false,以強制關閉 MDI 父表單和所有 MDI 子表單。

另請參閱