共用方式為


HOW TO:建立 MDI 子表單

重要事項重要事項

本主題使用 MainMenu 的控制項已由 MenuStrip 控制項所取代。 您也可以選擇保留 MainMenu 控制項,以提供回溯相容性 (Backward Compatibility) 並供未來使用。 如需使用 MenuStrip 建立 MDI 父表單的詳細資訊,請參閱 HOW TO:使用 MenuStrip 建立 MDI 視窗清單 (Windows Form)

MDI 子表單是多重文件介面 (MDI) 應用程式的基本項目,就如同這些表單是使用者互動的中心。

在以下程序中,您將建立可以顯示 RichTextBox 控制項的 MDI 子表單,這和大多數的文書處理應用程式類似。 利用其他控制項 (例如 DataGridView 控制項) 取代 System.Windows.Forms 控制項或混合控制項,都可以讓您建立不同的 MDI 子視窗 (並依照副檔名建立 MDI 應用程式)。

注意事項注意事項

根據您目前使用的設定或版本,您所看到的對話方塊與功能表指令可能會與 [說明] 中描述的不同。 若要變更設定,請從 [工具] 功能表中選取 [匯入和匯出設定]。 如需詳細資訊,請參閱 使用設定

若要建立 MDI 子表單

  1. 建立一個 MDI 父表單,它的功能表架構包括 [檔案] 和 [視窗] 上層功能表項目,以及 [新增] 和 [關閉] 功能表項目。 如需建立 MDI 父表單的詳細資訊,請參閱 HOW TO:建立 MDI 父表單

  2. 在 [屬性] 視窗頂端的下拉式清單中,選取對應至 [視窗] 功能表項目的功能表項目,並將 MdiList 屬性設定為 true

    如此即可讓 [視窗] 功能表維持已開啟的 MDI 子視窗的清單,作用中的子視窗旁邊會有核取記號。

  3. 在 [方案總管] 中,以滑鼠右鍵按一下專案,指向 [加入],然後選取 [加入新項目]。

    這個表單將是您的 MDI 子表單樣板。

    注意事項注意事項

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

  4. 從 [加入新項目] 對話方塊的 [範本] 窗格,選取 [Windows Form] (在 Visual Basic 或在 Visual C# 中) 或選取 [Windows Form 應用程式 (.NET)] (在 Visual C++ 中)。 在 [名稱] 方塊中,將表單命名為 Form2。 按一下 [開啟] 按鈕,將表單加入至專案。

    此時會開啟 [Windows Form 設計工具] 並顯示 Form2。

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

  6. 在 [屬性] 視窗中,將 Anchor 屬性設定為 [Top, Left],將 Dock 屬性設定為 [Fill]。

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

  7. 為 [新增] 功能表項目建立 Click 事件處理常式。 如需建立事件處理常式的詳細資訊,請參閱 HOW TO:使用設計工具建立事件處理常式

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

    注意事項注意事項

    在下列範例中,事件處理常式會處理 MenuItem2 的 Click 事件。 請注意,視應用程式架構的細節而定,[新增] 功能表項目可能不是 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();
       }
    

    請在 Visual C++ 中,將下列 #include 指示詞加入至 Form1.h 上方:

    #include "Form2.h"
    
  9. 請按 F5 以執行應用程式。 您可選取 [檔案] 功能表中的 [新增] 以建立新的 MDI 子表單,這些表單在 [視窗] 功能表中可以追蹤得到。

    注意事項注意事項

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

請參閱

工作

HOW TO:建立 MDI 父表單

HOW TO:決定作用中的 MDI 子系

HOW To:傳送資料至作用中的 MDI 子系

HOW TO:安排 MDI 子表單

其他資源

多重文件介面 (MDI) 應用程式