逐步解說:使用功能表合併和 ToolStrip 控制項建立 MDI 表單
System.Windows.Forms 命名空間支援多重文件介面 (MDI) 應用程式,而 MenuStrip 控制項則支援功能表合併。 MDI 表單也可以由 ToolStrip 控制項建立。
本逐步解說示範如何搭配 MDI 表單使用 ToolStripPanel 控制項。 這個表單也支援子功能表的功能表合併。 本逐步解說說明下列工作:
建立 Windows Forms 專案。
建立表單的主功能表。 功能表的實際名稱會有所不同。
將 ToolStripPanel 控制項新增至 工具箱 。
建立子表單。
依迭置順序排列 ToolStripPanel 控制項。
當您完成時,您將有一個支援功能表合併和可 ToolStrip 移動控制項的 MDI 表單。
若要將本主題中的程式碼複製為單一清單,請參閱 如何:使用功能表合併和 ToolStrip 控制項 建立 MDI 表單。
必要條件
您將需要 Visual Studio 才能完成本逐步解說。
建立專案
在 Visual Studio 中,建立名為 MdiForm 的 Windows 應用程式專案( 檔案 > 新 > 專案 > Visual C# 或 Visual Basic > 傳統型 > Windows Forms 應用程式)。
在 Windows Forms 設計工具中,選取表單。
在屬性視窗中,將 的值 IsMdiContainer 設定為
true
。
建立主功能表
父 MDI 表單包含主功能表。 主功能表有一個名為 Window 的功能表項目 。 使用 [ 視窗] 功能表項目,您可以建立子表單。 子表單中的功能表項目會合並至主功能表。
從 [ 工具箱] MenuStrip 將控制項拖曳到表單上。
ToolStripMenuItem將 新增至 控制項, MenuStrip 並將它命名為 Window 。
選取 MenuStrip 控制項。
在屬性視窗中,將 屬性的值 MdiWindowListItem 設定為
ToolStripMenuItem1
。將子專案新增至 [視窗 ] 功能表項目,然後將子專案 命名為 [新增 ]。
在屬性視窗中,按一下 [ 事件 ]。
按兩下 Click 事件。
Windows Forms 設計工具會產生 事件的事件處理常式 Click 。
將下列程式碼插入事件處理常式。
// This method creates a new ChildForm instance // and attaches it to the MDI parent form. private void newToolStripMenuItem_Click(object sender, EventArgs e) { ChildForm f = new ChildForm(); f.MdiParent = this; f.Text = "Form - " + this.MdiChildren.Length.ToString(); f.Show(); }
' This method creates a new ChildForm instance ' and attaches it to the MDI parent form. Private Sub newToolStripMenuItem_Click( _ ByVal sender As Object, _ ByVal e As EventArgs) _ Handles newToolStripMenuItem.Click Dim f As New ChildForm() f.MdiParent = Me f.Text = "Form - " + Me.MdiChildren.Length.ToString() f.Show() End Sub
將 ToolStripPanel 控制項新增至工具箱
當您搭配 MDI 表單使用 MenuStrip 控制項時,必須具有 ToolStripPanel 控制項。 您必須將 ToolStripPanel 控制項新增至 工具箱 ,才能在 Windows Forms 設計工具中建置 MDI 表單。
開啟 [ 工具箱 ],然後按一下 [ 所有 Windows Forms] 索引標籤以顯示可用的 Windows Forms 控制項。
以滑鼠右鍵按一下以開啟快捷方式功能表,然後選取 [ 選擇專案 ]。
在 [ 選擇工具箱專案 ] 對話方塊中,向下 捲動 [名稱 ] 資料行,直到您找到 ToolStripPanel 為止。
依 ToolStripPanel 選取核取方塊,然後按一下 [ 確定 ]。
控制項 ToolStripPanel 會出現在 [工具箱 ] 中 。
建立子表單
在此程式中,您將定義具有其本身 MenuStrip 控制項的個別子表單類別。 此表單的功能表項目會與父表單的功能表項目合併。
將名為
ChildForm
的新表單新增至專案。如需詳細資訊,請參閱 如何:將 Windows Forms 新增至專案 。
從 [ 工具箱] MenuStrip 將控制項拖曳到子表單上。
MenuStrip按一下控制項的設計工具動作圖像 ( ),然後選取 [ 編輯專案 ]。
在 [ 專案集合編輯器] 對話方塊中,將名為 ChildMenuItem 的新 ToolStripMenuItem 新增至子功能表。
如需詳細資訊,請參閱 ToolStrip Items 集合編輯器 。
測試表單
按 F5 編譯並執行您的表單。
按一下 [ 視窗 ] 功能表項目以開啟功能表,然後按一下 [ 新增 ]。
新的子表單會在表單的 MDI 工作區中建立。 子表單的功能表會與主功能表合併。
關閉子表單。
子表單的功能表會從主功能表移除。
按一下 [ 新增 ] 幾次。
子表單會自動列在 [視窗 ] 功能表項目下,因為 MenuStrip 已指派控制項的 MdiWindowListItem 屬性。
新增 ToolStrip 支援
在此程式中,您會將四 ToolStrip 個控制項新增至 MDI 父表單。 每個 ToolStrip 控制項都會新增至控制項內 ToolStripPanel ,該控制項會固定在表單邊緣。
從 [ 工具箱] ToolStripPanel 將控制項拖曳到表單上。
選取控制項後 ToolStripPanel ,按兩下 ToolStrip [工具箱 ] 中的 控制項。
ToolStrip控制項會在 控制項中 ToolStripPanel 建立。
選取 ToolStripPanel 控制項。
在屬性視窗中,將 控制項的 Dock 屬性值變更為 Left 。
控制項 ToolStripPanel 停駐在表單左側的主功能表下方。 MDI 工作區會調整大小以符合 ToolStripPanel 控制項。
重複步驟 1 到 4。
將新 ToolStripPanel 控制項停駐在表單頂端。
控制項 ToolStripPanel 停駐在主功能表下方,但停駐在第一個 ToolStripPanel 控制項右邊。 此步驟說明正確定位 ToolStripPanel 控制項中 z 順序的重要性。
針對另外 ToolStripPanel 兩個控制項重複步驟 1 到 4。
將新 ToolStripPanel 控制項停駐在表單的右邊和底部。
依 Z 順序排列 ToolStripPanel 控制項
停駐 ToolStripPanel 控制項在 MDI 表單上的位置取決於控制項在迭置順序中的位置。 您可以在 [檔大綱] 視窗中輕鬆排列控制項的迭置順序。
在 [ 檢視] 功能表中,按一下 [其他視窗 ],然後按一下 [ 檔大綱 ]。
上一個程式中控制項 ToolStripPanel 的相片順序為非標準。 這是因為迭置順序不正確。 使用 [檔大綱] 視窗來變更控制項的迭置順序。
在 [檔大綱] 視窗中,選取 [ToolStripPanel4 ]。
重複按一下向下箭號按鈕,直到 ToolStripPanel4 位於清單底部為止。
ToolStripPanel4 控制項停駐在表單底部,位於其他控制項底下。
選取 [ToolStripPanel2 ]。
按一下向下箭號按鈕一次,將控制項放在清單中的第三個位置。
ToolStripPanel2 控制項會停駐在表單頂端、主功能表下方,以及其他控制項上方。
在 [ 檔大綱] 視窗中選取各種控制項,並將其移至迭置順序中的不同位置。 請注意停駐控制項放置迭置順序的效果。 使用 [編輯 ] 功能表上的 CTRL-Z 或 [復原] 來復原您的變更。
檢查點 - 測試表單
按 F5 編譯並執行您的表單。
按一下控制項的 ToolStrip 框線,並將控制項拖曳至表單上的不同位置。
您可以將控制項從一個控制項拖曳 ToolStrip 到另一個 ToolStripPanel 控制項。
下一步
在本逐步解說中,您已建立具有控制項和功能表合併的 ToolStrip MDI 父表單。 您可以針對許多其他用途使用 ToolStrip 控制項系列:
使用 ContextMenuStrip 建立控制項的快顯功能表。 如需詳細資訊,請參閱 CoNtextMenu 元件概觀 。
建立具有自動填入標準功能表的表單。 如需詳細資訊,請參閱 逐步解說:提供標準功能表項目給表單 。
ToolStrip為您的控制項提供專業型式。 如需詳細資訊,請參閱 如何:設定應用程式的 ToolStrip 轉譯器。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應