ToolStrip 控制項架構
ToolStrip和 ToolStripItem 類別提供彈性、可延伸的系統,用於顯示工具列、狀態和功能表項。 這些類別全都包含在命名空間中 System.Windows.Forms ,而且它們通常會以 「ToolStrip」 前置詞 ( ToolStripOverflow例如) 或 “Strip” 後綴 (例如 ) MenuStrip命名。
ToolStrip
下列主題描述 ToolStrip 和衍生自它的控件。
ToolStrip是、 StatusStrip和 ContextMenuStrip的MenuStrip抽象基類。 下列物件模型會顯示 ToolStrip 繼承階層。
您可以透過Items集合存取 中的所有ToolStrip專案。 您可以透過DropDownItems集合存取 中的所有ToolStripDropDownItem專案。 在衍生自 ToolStrip的類別中 DisplayedItems ,您也可以使用 屬性只存取目前顯示的專案。 這些是目前不在溢位功能表中的專案。
下列專案是特別設計來順暢地搭配和ToolStripSystemRendererToolStripProfessionalRenderer所有方向運作。 控制項的設計時間 ToolStrip 預設會提供它們:
MenuStrip
MenuStrip 是取代 MainMenu的最上層容器。 它也提供重要處理和多個文件介面 (MDI) 功能。 在功能上,與搭配使用,ToolStripDropDownItem雖然它們衍生自 ToolStripItem。MenuStripToolStripMenuItem
下列專案是特別設計來順暢地搭配和ToolStripSystemRendererToolStripProfessionalRenderer所有方向運作。 控制項的設計時間 MenuStrip 預設會提供它們:
StatusStrip
StatusStrip 取代 StatusBar 控制件。 的特殊功能 StatusStrip 包括自定義表格配置、支援表單的大小調整和移動底板,以及 Spring
屬性,這可讓 ToolStripStatusLabel 自動填滿可用空間。
下列專案是特別設計來順暢地搭配和ToolStripSystemRendererToolStripProfessionalRenderer所有方向運作。 控制項的設計時間 StatusStrip 預設會提供它們:
ContextMenuStrip
ContextMenuStrip 會取代 ContextMenu。 您可以將 與任何控件產生關聯 ContextMenuStrip ,而滑鼠右鍵會自動顯示操作功能表(或快捷方式功能表)。 您可以使用 方法,以程式設計方式Show顯示 ContextMenuStrip 。 ContextMenuStrip 支援可 Opening 取消和 Closing 事件來處理動態母體擴展和多鍵案例。 ContextMenuStrip 支援影像、功能表項檢查狀態、文字、存取鍵、快捷方式和串聯功能表。
下列專案是特別設計來順暢地搭配和ToolStripSystemRendererToolStripProfessionalRenderer所有方向運作。 控制項的設計時間 ContextMenuStrip 預設會提供它們:
ToolStrip 一般功能
下列主題描述和衍生控件的 ToolStrip 泛型特性和行為。
小畫家
您可以透過數種方式在控件中 ToolStrip 執行自定義繪製。 與其他 Windows Forms 控件一樣,ToolStrip和 都有可OnPaint
覆寫的方法和Paint
ToolStripItem事件。 如同一般繪製,座標系統相對於控件的工作區:也就是說,控件的左上角是0, 0。 的事件 Paint
和 OnPaint
方法 ToolStripItem 的行為就像其他控件繪製事件一樣。
控件 ToolStrip 也會透過 ToolStripRenderer 類別更精細地存取專案和容器的轉譯,其具有繪製背景、專案背景、專案影像、專案箭號、專案文字和框線的 ToolStrip可覆寫方法。 這些方法的事件自變數會公開數個屬性,例如您可以視需要調整的矩形、色彩和文字格式。
若要只調整項目繪製方式的幾個層面,您通常會覆寫 ToolStripRenderer。
如果您要撰寫新專案並想要控制繪製的所有層面,請覆寫 OnPaint
方法。 在 內 OnPaint
,您可以使用 中 ToolStripRenderer的方法。
根據預設, ToolStrip 會緩衝兩次,並利用 OptimizedDoubleBuffer 設定。
育兒
容器擁有權和父系的概念比其他 Windows Forms 容器控件中的 ToolStrip 控件更為複雜。 這需要支援動態案例,例如溢位、跨多個 ToolStrip 項目共用下拉式專案,以及支援從控件產生 ContextMenuStrip 。
下列清單描述與父系相關的成員,並說明其用法。
OwnerItem 存取下拉式專案的來源專案。 這類似於 SourceControl,但不是傳回 控件,而是會 ToolStripItem傳回 。
SourceControl會決定當多個控件共用相同的 ContextMenuStrip時,哪個控件是 的來源ContextMenuStrip。
GetCurrentParent 是屬性的 Parent 唯讀存取子。 父代與擁有者不同,因為父代表示顯示專案目前傳回的目前 ToolStrip ,而該專案可能位於溢位區域中。
Owner 傳 ToolStrip 回 Items 集合包含目前 ToolStripItem的 。 這是在最上層ToolStrip參考ImageList或其他屬性的最佳方式,而不需要撰寫特殊程式代碼來處理溢位。
繼承控件的行為
下列控制項會在繼承中使用時鎖定:
ToolStripPanel,其中包含和個別ToolStripPanel控件中的ToolStripContainer面板。
例如,使用上一個清單中的一或多個控件來建立新的 Windows Forms 應用程式。 將一或多個控件的存取修飾詞設定為 public
或 protected
,然後建置專案。 新增繼承自第一個窗體的窗體,然後選取繼承的控件。 控件似乎已鎖定,行為就像其存取修飾詞是 private
一樣。
繼承的 ToolStripContainer 支援
控件 ToolStripContainer 支援有限的繼承案例,類似下列範例:
建立新的 Windows Form 應用程式。
將 ToolStripContainer 加入表單。
將存 ToolStripContainer 取修飾詞設定為
public
或protected
。將、 MenuStrip和 ContextMenuStrip 控制件的任何組合ToolStrip新增至 ToolStripPanel 的區域ToolStripContainer。
組建專案。
新增繼承自第一個窗體的表單。
選取表單上繼承的 ToolStripContainer 。
子控件的繼承行為
完成上述步驟之後,會發生下列繼承的行為:
在設計工具中,控件會出現繼承的圖示。
控件 ToolStripPanel 已鎖定;您無法選取或重新排列其內容。
您可以將控件新增至 ToolStripContentPanel、移動控件,並將其設為 的 ToolStripContentPanel子控件。
建置表單之後,您的變更會持續發生。
注意
從屬於ToolStripContainer的所有ToolStripPanel控件中移除存取修飾詞。 的 ToolStripContainer 存取修飾詞會控管整個控件。
部分信任
部分信任下的限制 ToolStrip
旨在防止意外輸入未經授權的人員或服務可能使用的個人資訊。 保護措施如下:
ToolStripDropDown
控制項需要在 AllWindows 中 ToolStripControlHost顯示專案。 這同時適用於、 ToolStripComboBox和 ToolStripProgressBar 等ToolStripTextBox內建控件,以及使用者建立的控件。 如果不符合此需求,則不會顯示這些專案。 不會擲回任何例外狀況。不允許將 AutoClose 屬性設定為
false
,而且會忽略可 Closing 取消的事件參數。 如此一來,不需要關閉下拉式專案,就不可能輸入多個擊鍵。 如果不符合此需求,則不會顯示這類專案。 不會擲回任何例外狀況。如果事件發生在 以外的 AllWindows部分信任內容中,則不會引發許多擊鍵處理事件。
未授與存取金鑰時 AllWindows ,不會處理存取金鑰。
使用方式
下列使用模式與版面配置、鍵盤互動和使用者行為有關 ToolStrip :
已加入 ToolStripPanel
ToolStrip可以在和 ToolStripPanel 之間ToolStripPanel重新置放。 會
Dock
忽略 屬性,如果 Stretch 屬性是false
,則會 ToolStrip 隨著專案加入而 ToolStripPanel成長。 一般而言, ToolStrip 不會參與定位順序。固定
ToolStrip會放在固定位置的容器一側,其大小會擴充至停駐的整個邊緣。 一般而言, ToolStrip 不會參與定位順序。
絕對定位
鍵盤互動
存取金鑰
結合或遵循 ALT 鍵,存取鍵是使用鍵盤啟用控制件的其中一種方式。 ToolStrip 同時支持明確和隱含存取金鑰。 明確定義會使用字母前面的 ampersand (&) 字元。 隱含定義會使用演算法,根據指定 Text
屬性中的字元順序,嘗試尋找相符的專案。
快速鍵
使用的 MenuStrip 快速鍵會使用 Keys 列舉的組合來定義快速鍵(不是特定順序)。 您也可以使用 ShortcutKeyDisplayString 屬性來顯示只有文字的快速鍵,例如顯示 「Del」 而不是 「Delete」。。
導覽
ALT 鍵會 MenuStrip 啟動 所指向的 MainMenuStrip。 從該處,CTRL+TAB 在 內的ToolStripPanel
控件之間ToolStrip巡覽。 數位按鍵上的 TAB 鍵和箭頭鍵會在 中的 ToolStrip項目之間巡覽。 特殊演算法會處理溢位區域中的流覽。 SPACEBAR 會 ToolStripButton選取、 ToolStripDropDownButton或 ToolStripSplitButton。
焦點和驗證
由 ALT 鍵啟動時, MenuStrip 或 ToolStrip 通常不會從目前具有焦點的控件取得或移除焦點。 如果控件裝載於 或 MenuStrip 的下 MenuStrip拉式清單中,當使用者按下 TAB 鍵時,控件會取得焦點。 一般而言,GotFocusLostFocus鍵盤啟動 、、 Enter和 Leave 事件時,可能不會引發 這些事件MenuStrip。 在這種情況下,請改用 MenuActivate 和 MenuDeactivate 事件。
根據預設, CausesValidation 是 false
。 在您的表單上明確呼叫 Validate 以執行驗證。
版面配置
ToolStrip您可以使用 屬性選擇 的其中一個成員ToolStripLayoutStyle來控制版面配置LayoutStyle。
堆疊版面配置
堆疊是在的兩 ToolStrip端排列專案。 下列清單描述堆疊配置。
StackWithOverflow 是預設值。 此設定會根據 ToolStripOrientation 屬性自動改變其版面配置,以處理拖曳和停駐案例。
HorizontalStackWithOverflowToolStrip水平呈現彼此旁的專案。
堆疊版面配置的其他功能
Alignment 會決定專案對齊的 ToolStrip 結尾。
當專案不符合 時 ToolStrip,就會自動顯示溢位按鈕。 屬性 Overflow 設定會決定專案是否一律會視需要出現在溢位區域中,還是永遠不要出現。
在 事件中 LayoutCompleted ,您可以檢查 Placement 屬性,以判斷專案是否放在主要 ToolStrip、溢位 ToolStrip,或目前未顯示。 項目未顯示的典型原因是專案不符合 main ToolStrip ,且其 Overflow 屬性設定為 Never。
ToolStrip將它放入 ,ToolStripPanel並將設定GripStyle為 Visible,讓它成為可移動的 。
其他版面配置選項
流程配置
Flow配置是、 ToolStripDropDownMenu和ToolStripOverflow預設ContextMenuStrip值。 類似於 FlowLayoutPanel。 版面配置的功能 Flow 如下所示:
的所有功能 FlowLayoutPanel 都會由 LayoutSettings 屬性公開。 您必須將 LayoutSettings 類別轉換成 類別 FlowLayoutSettings 。
忽略 Alignment 屬性。
在 事件中 LayoutCompleted ,您可以檢查 Placement 屬性,以判斷專案是放在主上 ToolStrip 還是不符合。
不會轉譯底線,因此ToolStripFlow無法在 中移動版面配置樣式中的 ToolStripPanel 。
表格版面配置
Table 版面配置是的 StatusStrip預設值。 類似於 TableLayoutPanel。 版面配置的功能 Flow 如下所示:
的所有功能 TableLayoutPanel 都會由 LayoutSettings 屬性公開。 您必須將 LayoutSettings 類別轉換成 類別 TableLayoutSettings 。
忽略 Alignment 屬性。
在 事件中 LayoutCompleted ,您可以檢查 Placement 屬性,以判斷專案是放在主上 ToolStrip 還是不符合。
不會轉譯底線,因此ToolStripTable無法在 中移動版面配置樣式中的 ToolStripPanel 。
ToolStripItem
下列主題描述 ToolStripItem 和衍生自它的控件。
ToolStripItem 是進入 ToolStrip之所有專案的抽象基類。 下列物件模型會顯示 ToolStripItem 繼承階層。
ToolStripItem 類別會直接繼承自 ToolStripItem,或是間接繼承自 ToolStripItemToolStripControlHost 或 ToolStripDropDownItem。
ToolStripItem控件必須包含在 、MenuStrip、 StatusStrip或 ContextMenuStrip 中ToolStrip,而且無法直接加入至窗體。 各種容器類別的設計目的是要包含適當的控件子集 ToolStripItem 。
下表列出庫存 ToolStripItem 控件和容器,其中看起來最好。 雖然任何 ToolStrip 專案都可以裝載在任何衍生容器中 ToolStrip,但這些項目的設計目的是在下列容器中看起來最好:
注意
ToolStripDropDown 不會出現在設計工具工具箱中。
自主專案 | ToolStrip | MenuStrip | ContextMenuStrip | StatusStrip | ToolStripDropDown |
---|---|---|---|---|---|
ToolStripButton | 是 | 無 | 無 | 無 | .是 |
ToolStripComboBox | .是 | .是 | .是 | 無 | .是 |
ToolStripSplitButton | .是 | 無 | 無 | .是 | .是 |
ToolStripLabel | .是 | 無 | 無 | .是 | .是 |
ToolStripSeparator | .是 | .是 | .是 | 無 | .是 |
ToolStripDropDownButton | .是 | 無 | 無 | .是 | .是 |
ToolStripTextBox | .是 | .是 | .是 | 無 | .是 |
ToolStripMenuItem | 無 | .是 | .是 | 無 | 無 |
ToolStripStatusLabel | 無 | 無 | 無 | .是 | 無 |
ToolStripProgressBar | .是 | 無 | 無 | .是 | 無 |
ToolStripControlHost | .是 | .是 | 無 | .是 | Yes |
ToolStripButton
ToolStripButton 是的 ToolStrip按鈕專案。 您可以使用各種框線樣式來顯示它,而且您可以使用它來表示和啟用操作狀態。 您也可以將它定義為預設具有焦點。
ToolStripLabel
提供 ToolStripLabel 控制件中的 ToolStrip 標籤功能。 ToolStripLabel就像 ToolStripButton 預設不會取得焦點的 ,而且不會轉譯為已推送或反白顯示。
ToolStripLabel 裝載的項目支援存取金鑰。
使用上的 LinkColorToolStripLabel 、 LinkVisited和 LinkBehavior 屬性來支援 中的ToolStrip連結控制件。
ToolStripStatusLabel
ToolStripStatusLabel是專為 在中使用的StatusStrip設計版本ToolStripLabel。 特殊功能包括 BorderStyle、 BorderSides和 Spring。
ToolStripSeparator
會 ToolStripSeparator 根據方向,將垂直或水平線新增至工具列或功能表。 它提供專案群組或區別,例如功能表上的專案。
您可以從下拉式清單中選擇它,在設計時間新增 ToolStripSeparator 。 不過,您也可以在設計工具範本節點或 Add 方法中輸入連字元 (-) 來自動建立 ToolStripSeparator 。
ToolStripControlHost
ToolStripControlHost是、 ToolStripTextBox和 ToolStripProgressBar的ToolStripComboBox抽象基類。 ToolStripControlHost 可以透過兩種方式裝載其他控件,包括自定義控件:
ToolStripControlHost使用衍生自 Control類別建構 。 若要完整存取裝載的控件和屬性,您必須將 Control 屬性轉換回它所代表的實際類別。
擴充 ToolStripControlHost繼承類別的無參數建構函式,呼叫基類建構函式,傳遞衍生自 Control的類別。 這個選項可讓您包裝通用控制項方法和屬性,以便輕鬆存取 ToolStrip。
ToolStripComboBox
ToolStripComboBoxComboBox已針對 在中ToolStrip裝載優化。 裝載控件的屬性和事件的子集會在層級公開 ToolStripComboBox ,但基礎 ComboBox 控件可透過 ComboBox 屬性完全存取。
ToolStripTextBox
ToolStripTextBoxTextBox已針對 在中ToolStrip裝載優化。 裝載控件的屬性和事件的子集會在層級公開 ToolStripTextBox ,但基礎 TextBox 控件可透過 TextBox 屬性完全存取。
ToolStripProgressBar
ToolStripProgressBarProgressBar已針對 在中ToolStrip裝載優化。 裝載控件的屬性和事件的子集會在層級公開 ToolStripProgressBar ,但基礎 ProgressBar 控件可透過 ProgressBar 屬性完全存取。
ToolStripDropDownItem
ToolStripDropDownItem是 、 ToolStripDropDownButton和 ToolStripSplitButton的ToolStripMenuItem抽象基類,可以直接裝載專案,或在下拉式容器中裝載其他專案。 若要這樣做, DropDown 您可以將 屬性設定為 ToolStripDropDown ,並設定 Items 的 ToolStripDropDown屬性。 直接透過 DropDownItems 屬性存取這些下拉式專案。
ToolStripMenuItem
ToolStripMenuItemToolStripDropDownItem是 ,ToolStripDropDownMenu適用於和 ContextMenuStrip 來處理功能表的特殊醒目提示、版面配置和數據行排列。
ToolStripDropDownButton
ToolStripDropDownButton 看起來像 ToolStripButton,但是當使用者按兩下一下一時,它會顯示下拉式區域。 藉由設定 ShowDropDownArrow 屬性來隱藏或顯示下拉式箭號。 ToolStripDropDownButtonToolStripOverflowButton裝載 ,顯示溢位的專案ToolStrip。
ToolStripSplitButton
ToolStripSplitButton 結合按鈕和下拉式按鈕功能。
DefaultItem使用 屬性,將所選下拉式清單專案的事件與按鈕上顯示的專案同步Click處理。
ToolStripItem 一般功能
ToolStripItem 提供下列繼承控制件的泛型功能和選項:
核心事件
影像處理
對齊方式
文字和影像關聯性
顯示樣式
核心事件
ToolStripItem 控件會收到自己的按兩下、滑鼠和繪製事件,而且也可以執行一些鍵盤前置處理。
圖像處理
Image、ImageAlign、ImageIndex、 ImageKey和 ImageScaling 屬性與影像處理的各個層面有關。 直接設定這些屬性,或藉由設定僅限ImageList運行時間的屬性,在控件中使用ToolStrip影像。
影像縮放取決於 和 ToolStripItem中的ToolStrip屬性互動,如下所示:
ImageScalingSize 是最終映像的縮放比例,由映像 ImageScaling 設定和容器 AutoSize 設定的組合所決定。
如果 AutoSize 是
true
(預設值)且 ToolStripItemImageScaling 為 SizeToFit,則不會發生任何影像縮放,且 ToolStrip 大小是最大專案的大小,或指定的大小下限。如果 AutoSize 是 且 ToolStripItemImageScaling 為 None
false
,則不會發生影像或ToolStrip縮放。
對齊方式
屬性的值 Alignment 會決定項目出現所在的 結尾 ToolStrip 。 只有當 的ToolStrip版面配置樣式設定為其中一個堆疊溢位值時,屬性Alignment才有效。
專案會依專案出現在 Items 集合中的順序放在 ToolStrip 上。 若要以程式設計方式變更專案配置的位置,請使用 Insert 方法移動集合中的專案。 這個方法會移動專案,但不會複製它。
文字和影像關聯性
屬性 TextImageRelation 會定義影像相對於 上 ToolStripItem文字的相對位置。 缺少影像、文字或兩者的專案都會被視為特殊案例,因此 ToolStripItem 不會顯示遺漏元素或元素的空白位置。
顯示樣式
DisplayStyle 可讓您設定專案的 Text 和 Image 屬性值,同時只顯示您想要的內容。 這通常只會在不同內容中顯示相同項目時變更顯示樣式。
配件類別
提供各種其他功能的類別包括:
ToolStripManager 支援 ToolStrip整個應用程式的相關工作,例如合併、設定和轉譯器選項。
ToolStripRenderer 可讓您輕鬆地將特定樣式或主題套用至 ToolStrip 。
ToolStripProfessionalRenderer 會根據可取代的色彩表建立畫筆和筆刷(ProfessionalColorTable)。
ToolStripSystemRenderer 將系統色彩和一般視覺化樣式套用至 ToolStrip 應用程式。
ToolStripContainer 類似於 SplitContainer。 它使用四個固定側面板(實例) ToolStripPanel和一個中央面板(實例) ToolStripContentPanel來建立一般安排。 您無法移除側邊面板,但可以隱藏它們。 您無法移除或隱藏中央面板。 您可以在側邊面板中排列一或多個 ToolStrip、 MenuStrip或 StatusStrip 控制件,並使用中央面板進行其他控件。 ToolStripContentPanel也提供讓轉譯器支援進入窗體主體的方式,以取得一致的外觀。 ToolStripContainer 不支援多個檔介面 (MDI)。
ToolStripPanel 提供移動和排列 ToolStrip 控件的空間。 如果您選擇,而且 ToolStripPanel 在 MDI 案例中運作良好,您只能使用一個面板。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應