共用方式為


如何:建立 MDI 子表單

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

在下列程式中,您將使用 Visual Studio 建立 MDI 子表單,以顯示 RichTextBox 控制項,類似於大部分的文字處理應用程式。 以其他控制項 (例如 DataGridView 控制項) 或混合控制項來取代 System.Windows.Forms 控制項,可讓您建立各種可能的 MDI 子視窗 (甚至是 MDI 應用程式)。

建立 MDI 子表單

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

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

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

  3. 按一下 [項目] 屬性旁的省略符號 (…),然後按兩下 [新增] 以新增兩個子工具區功能表項目。 將這些項目的 Text 屬性設定為 NewWindow

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

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

    注意

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

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

    Windows Form 設計工具 隨即開啟,顯示 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 屬性設定為 [Windows] 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 子表單。

另請參閱