MDI 子表單是 多重文件介面 (MDI) 應用程式 的基本元素,因為這些表單是使用者互動的中心。
在下列程式中,您將使用 Visual Studio 建立 MDI 子表單,以顯示 RichTextBox 控制項,類似於大部分的文字處理應用程式。 以其他控制項 (例如 DataGridView 控制項) 或混合控制項來取代 System.Windows.Forms 控制項,可讓您建立各種可能的 MDI 子視窗 (甚至是 MDI 應用程式)。
建立 MDI 子表單
在 Visual Studio 中建立新的 Windows Forms 應用程式專案。 在表單的 [屬性] 視窗中,將其 IsMdiContainer 屬性設定為
true
,並將其WindowsState
屬性設定為Maximized
。如此即可將表單指定為子視窗的 MDI 容器。
將 MenuStrip 控制項從 [
Toolbox
] 拖曳至表單。 將其Text
屬性設定為 File。按一下 [項目] 屬性旁的省略符號 (…),然後按兩下 [新增] 以新增兩個子工具區功能表項目。 將這些項目的
Text
屬性設定為 New 與 Window。在 [方案總管] 中,於專案上按一下滑鼠右鍵,然後選取 [新增]>[新增項目]。
在 [新增項目] 對話方塊中,從 [範本] 窗格中選取 [Windows 表單] (在 Visual Basic 或 Visual C# 中) 或 [Windows Forms 應用程式 (.NET)] (在 Visual C++ 中)。 在 [名稱] 方塊中,將表單命名 Form2。 選取 [開啟],將表單新增至專案。
注意
您在這個步驟中所建立的 MDI 子表單是標準的 Windows Form。 因此,它具有 Opacity 屬性,可讓您控制表單的透明度。 然而,Opacity 屬性是專為最上層視窗而設計的。 請勿搭配 MDI 子表單使用這個屬性,這樣做可能會發生繪製問題。
這個表單將是您的 MDI 子表單範本。
Windows Form 設計工具 隨即開啟,顯示 Form2。
從 [工具箱] 中,將 RichTextBox 控制項拖曳至表單。
在 [屬性] 視窗中,將
Anchor
屬性設定為 Top、Left,並將Dock
屬性設定為 Fill。如此一來,RichTextBox 控制項就會完全填滿 MDI 子表單區域,即使表單大小重新調整過亦可。
按兩下 [新增] 功能表項目,為其建立 Click 事件處理常式。
當使用者按一下 [新增] 功能表項目時,插入類似下列的程式碼,以建立新的 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(); }
在 C++ 中,在 Form1.h 頂端新增下列
#include
指示詞:#include "Form2.h"
在 [屬性] 視窗頂端的下拉式清單中,選取對應至 [檔案] 功能表區,並將 MdiWindowListItem 屬性設定為 [Windows] ToolStripMenuItem。
這可讓 [視窗] 功能表維護開啟的 MDI 子視窗的清單,其中使用中子視窗旁有一個核取記號。
按 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 子表單。