如何:建立 MDI 子表單
MDI 子表單是多文檔介面 (MDI) 應用程式 的基本元素 ,因為這些表單是使用者互動的中心。
在下列程式中,您將使用 Visual Studio 建立顯示控制項的 MDI 子表單 RichTextBox ,類似于大部分的文字處理應用程式。 System.Windows.Forms藉由替代控制項與其他控制項,例如 DataGridView 控制項,或控制項的混合,您可以建立具有各種可能性的 MDI 子視窗(以及延伸模組的 MDI 應用程式)。
建立 MDI 子表單
在 Visual Studio 中建立新的 Windows Forms 應用程式專案。 在表單的 [屬性] 視窗中,將其 IsMdiContainer 屬性設定為
true
,並將其WindowsState
屬性設定為Maximized
。如此即可將表單指定為子視窗的 MDI 容器。
將 MenuStrip 控制項從 [
Toolbox
] 拖曳至表單。 將其Text
屬性設定為 File 。按一下 Items 屬性旁的 省略號 (...),然後按一下 [新增 ] 以新增兩個子工具等量功能表項目。 將
Text
這些專案的 屬性設定為 [新增 ] 和 [視窗 ]。在 [方案總管] 中,於專案上按一下滑鼠右鍵,然後選取 [新增]>[新增項目]。
在 [ 新增專案 ] 對話方塊中,從 [範本 ] 窗格選取 [Windows Form ] (在 Visual Basic 或 Visual C# 中為 [Windows Form] 或 [.NET] [Visual C++]。 在 [ 名稱] 方塊中,將表單 命名為 Form2 。 選取 [ 開啟 ] 將表單新增至專案。
注意
您在這個步驟中所建立的 MDI 子表單是標準的 Windows Form。 因此,它具有 Opacity 屬性,可讓您控制表單的透明度。 然而,Opacity 屬性是專為最上層視窗而設計的。 請勿搭配 MDI 子表單使用這個屬性,這樣做可能會發生繪製問題。
這個表單將是您的 MDI 子表單範本。
Windows Forms 設計工具 隨即開啟,顯示 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 為 [視窗 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 子表單。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應