ToolStrip 控制項架構

ToolStripToolStripItem 類別提供彈性、可延伸的系統,用於顯示工具列、狀態和功能表項。 這些類別全都包含在命名空間中 System.Windows.Forms ,而且它們通常會以 「ToolStrip」 前置詞 ( ToolStripOverflow例如) 或 “Strip” 後綴 (例如 ) MenuStrip命名。

ToolStrip

下列主題描述 ToolStrip 和衍生自它的控件。

ToolStrip是、 StatusStripContextMenuStripMenuStrip抽象基類。 下列物件模型會顯示 ToolStrip 繼承階層。

Diagram that shows the ToolStrip object model.

您可以透過Items集合存取 中的所有ToolStrip專案。 您可以透過DropDownItems集合存取 中的所有ToolStripDropDownItem專案。 在衍生自 ToolStrip的類別中 DisplayedItems ,您也可以使用 屬性只存取目前顯示的專案。 這些是目前不在溢位功能表中的專案。

下列專案是特別設計來順暢地搭配和ToolStripSystemRendererToolStripProfessionalRenderer所有方向運作。 控制項的設計時間 ToolStrip 預設會提供它們:

MenuStrip 是取代 MainMenu的最上層容器。 它也提供重要處理和多個文件介面 (MDI) 功能。 在功能上,與搭配使用,ToolStripDropDownItem雖然它們衍生自 ToolStripItemMenuStripToolStripMenuItem

下列專案是特別設計來順暢地搭配和ToolStripSystemRendererToolStripProfessionalRenderer所有方向運作。 控制項的設計時間 MenuStrip 預設會提供它們:

StatusStrip

StatusStrip 取代 StatusBar 控制件。 的特殊功能 StatusStrip 包括自定義表格配置、支援表單的大小調整和移動底板,以及 Spring 屬性,這可讓 ToolStripStatusLabel 自動填滿可用空間。

下列專案是特別設計來順暢地搭配和ToolStripSystemRendererToolStripProfessionalRenderer所有方向運作。 控制項的設計時間 StatusStrip 預設會提供它們:

ContextMenuStrip

ContextMenuStrip 會取代 ContextMenu。 您可以將 與任何控件產生關聯 ContextMenuStrip ,而滑鼠右鍵會自動顯示操作功能表(或快捷方式功能表)。 您可以使用 方法,以程式設計方式Show顯示 ContextMenuStripContextMenuStrip 支援可 Opening 取消和 Closing 事件來處理動態母體擴展和多鍵案例。 ContextMenuStrip 支援影像、功能表項檢查狀態、文字、存取鍵、快捷方式和串聯功能表。

下列專案是特別設計來順暢地搭配和ToolStripSystemRendererToolStripProfessionalRenderer所有方向運作。 控制項的設計時間 ContextMenuStrip 預設會提供它們:

ToolStrip 一般功能

下列主題描述和衍生控件的 ToolStrip 泛型特性和行為。

小畫家

您可以透過數種方式在控件中 ToolStrip 執行自定義繪製。 與其他 Windows Forms 控件一樣,ToolStrip和 都有可OnPaint覆寫的方法和PaintToolStripItem事件。 如同一般繪製,座標系統相對於控件的工作區:也就是說,控件的左上角是0, 0。 的事件 PaintOnPaint 方法 ToolStripItem 的行為就像其他控件繪製事件一樣。

控件 ToolStrip 也會透過 ToolStripRenderer 類別更精細地存取專案和容器的轉譯,其具有繪製背景、專案背景、專案影像、專案箭號、專案文字和框線的 ToolStrip可覆寫方法。 這些方法的事件自變數會公開數個屬性,例如您可以視需要調整的矩形、色彩和文字格式。

若要只調整項目繪製方式的幾個層面,您通常會覆寫 ToolStripRenderer

如果您要撰寫新專案並想要控制繪製的所有層面,請覆寫 OnPaint 方法。 在 內 OnPaint,您可以使用 中 ToolStripRenderer的方法。

根據預設, ToolStrip 會緩衝兩次,並利用 OptimizedDoubleBuffer 設定。

育兒

容器擁有權和父系的概念比其他 Windows Forms 容器控件中的 ToolStrip 控件更為複雜。 這需要支援動態案例,例如溢位、跨多個 ToolStrip 項目共用下拉式專案,以及支援從控件產生 ContextMenuStrip

下列清單描述與父系相關的成員,並說明其用法。

繼承控件的行為

下列控制項會在繼承中使用時鎖定:

例如,使用上一個清單中的一或多個控件來建立新的 Windows Forms 應用程式。 將一或多個控件的存取修飾詞設定為 publicprotected,然後建置專案。 新增繼承自第一個窗體的窗體,然後選取繼承的控件。 控件似乎已鎖定,行為就像其存取修飾詞是 private一樣。

繼承的 ToolStripContainer 支援

控件 ToolStripContainer 支援有限的繼承案例,類似下列範例:

  1. 建立新的 Windows Form 應用程式。

  2. ToolStripContainer 加入表單。

  3. 將存 ToolStripContainer 取修飾詞設定為 publicprotected

  4. 將、 MenuStripContextMenuStrip 控制件的任何組合ToolStrip新增至 ToolStripPanel 的區域ToolStripContainer

  5. 組建專案。

  6. 新增繼承自第一個窗體的表單。

  7. 選取表單上繼承的 ToolStripContainer

子控件的繼承行為

完成上述步驟之後,會發生下列繼承的行為:

部分信任

部分信任下的限制 ToolStrip旨在防止意外輸入未經授權的人員或服務可能使用的個人資訊。 保護措施如下:

  • ToolStripDropDown 控制項需要在 AllWindowsToolStripControlHost顯示專案。 這同時適用於、 ToolStripComboBoxToolStripProgressBarToolStripTextBox內建控件,以及使用者建立的控件。 如果不符合此需求,則不會顯示這些專案。 不會擲回任何例外狀況。

  • 不允許將 AutoClose 屬性設定為 false ,而且會忽略可 Closing 取消的事件參數。 如此一來,不需要關閉下拉式專案,就不可能輸入多個擊鍵。 如果不符合此需求,則不會顯示這類專案。 不會擲回任何例外狀況。

  • 如果事件發生在 以外的 AllWindows部分信任內容中,則不會引發許多擊鍵處理事件。

  • 未授與存取金鑰時 AllWindows ,不會處理存取金鑰。

使用方式

下列使用模式與版面配置、鍵盤互動和使用者行為有關 ToolStrip

鍵盤互動

存取金鑰

結合或遵循 ALT 鍵,存取鍵是使用鍵盤啟用控制件的其中一種方式。 ToolStrip 同時支持明確和隱含存取金鑰。 明確定義會使用字母前面的 ampersand (&) 字元。 隱含定義會使用演算法,根據指定 Text 屬性中的字元順序,嘗試尋找相符的專案。

快速鍵

使用的 MenuStrip 快速鍵會使用 Keys 列舉的組合來定義快速鍵(不是特定順序)。 您也可以使用 ShortcutKeyDisplayString 屬性來顯示只有文字的快速鍵,例如顯示 「Del」 而不是 「Delete」。。

ALT 鍵會 MenuStrip 啟動 所指向的 MainMenuStrip。 從該處,CTRL+TAB 在 內的ToolStripPanel控件之間ToolStrip巡覽。 數位按鍵上的 TAB 鍵和箭頭鍵會在 中的 ToolStrip項目之間巡覽。 特殊演算法會處理溢位區域中的流覽。 SPACEBAR 會 ToolStripButton選取、 ToolStripDropDownButtonToolStripSplitButton

焦點和驗證

由 ALT 鍵啟動時, MenuStripToolStrip 通常不會從目前具有焦點的控件取得或移除焦點。 如果控件裝載於 或 MenuStrip 的下 MenuStrip拉式清單中,當使用者按下 TAB 鍵時,控件會取得焦點。 一般而言,GotFocusLostFocus鍵盤啟動 、、 EnterLeave 事件時,可能不會引發 這些事件MenuStrip。 在這種情況下,請改用 MenuActivateMenuDeactivate 事件。

根據預設, CausesValidationfalse。 在您的表單上明確呼叫 Validate 以執行驗證。

版面配置

ToolStrip您可以使用 屬性選擇 的其中一個成員ToolStripLayoutStyle來控制版面配置LayoutStyle

堆疊版面配置

堆疊是在的兩 ToolStrip端排列專案。 下列清單描述堆疊配置。

堆疊版面配置的其他功能

Alignment 會決定專案對齊的 ToolStrip 結尾。

當專案不符合 時 ToolStrip,就會自動顯示溢位按鈕。 屬性 Overflow 設定會決定專案是否一律會視需要出現在溢位區域中,還是永遠不要出現。

在 事件中 LayoutCompleted ,您可以檢查 Placement 屬性,以判斷專案是否放在主要 ToolStrip、溢位 ToolStrip,或目前未顯示。 項目未顯示的典型原因是專案不符合 main ToolStrip ,且其 Overflow 屬性設定為 Never

ToolStrip將它放入 ,ToolStripPanel並將設定GripStyleVisible,讓它成為可移動的 。

其他版面配置選項

其他設定選項是 Flow 與 。 Table

流程配置

Flow配置是、 ToolStripDropDownMenuToolStripOverflow預設ContextMenuStrip值。 類似於 FlowLayoutPanel。 版面配置的功能 Flow 如下所示:

表格版面配置

Table 版面配置是的 StatusStrip預設值。 類似於 TableLayoutPanel。 版面配置的功能 Flow 如下所示:

ToolStripItem

下列主題描述 ToolStripItem 和衍生自它的控件。

ToolStripItem 是進入 ToolStrip之所有專案的抽象基類。 下列物件模型會顯示 ToolStripItem 繼承階層。

Diagram that shows the ToolStripItem object model.

ToolStripItem 類別會直接繼承自 ToolStripItem,或是間接繼承自 ToolStripItemToolStripControlHostToolStripDropDownItem

ToolStripItem控件必須包含在 、MenuStripStatusStripContextMenuStripToolStrip,而且無法直接加入至窗體。 各種容器類別的設計目的是要包含適當的控件子集 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 裝載的項目支援存取金鑰。

使用上的 LinkColorToolStripLabelLinkVisitedLinkBehavior 屬性來支援 中的ToolStrip連結控制件。

ToolStripStatusLabel

ToolStripStatusLabel是專為 在中使用的StatusStrip設計版本ToolStripLabel。 特殊功能包括 BorderStyleBorderSidesSpring

ToolStripSeparator

ToolStripSeparator 根據方向,將垂直或水平線新增至工具列或功能表。 它提供專案群組或區別,例如功能表上的專案。

您可以從下拉式清單中選擇它,在設計時間新增 ToolStripSeparator 。 不過,您也可以在設計工具範本節點或 Add 方法中輸入連字元 (-) 來自動建立 ToolStripSeparator

ToolStripControlHost

ToolStripControlHost是、 ToolStripTextBoxToolStripProgressBarToolStripComboBox抽象基類。 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是 、 ToolStripDropDownButtonToolStripSplitButtonToolStripMenuItem抽象基類,可以直接裝載專案,或在下拉式容器中裝載其他專案。 若要這樣做, DropDown 您可以將 屬性設定為 ToolStripDropDown ,並設定 ItemsToolStripDropDown屬性。 直接透過 DropDownItems 屬性存取這些下拉式專案。

ToolStripMenuItem

ToolStripMenuItemToolStripDropDownItem是 ,ToolStripDropDownMenu適用於和 ContextMenuStrip 來處理功能表的特殊醒目提示、版面配置和數據行排列。

ToolStripDropDownButton

ToolStripDropDownButton 看起來像 ToolStripButton,但是當使用者按兩下一下一時,它會顯示下拉式區域。 藉由設定 ShowDropDownArrow 屬性來隱藏或顯示下拉式箭號。 ToolStripDropDownButtonToolStripOverflowButton裝載 ,顯示溢位的專案ToolStrip

ToolStripSplitButton

ToolStripSplitButton 結合按鈕和下拉式按鈕功能。

DefaultItem使用 屬性,將所選下拉式清單專案的事件與按鈕上顯示的專案同步Click處理。

ToolStripItem 一般功能

ToolStripItem 提供下列繼承控制件的泛型功能和選項:

  • 核心事件

  • 影像處理

  • 對齊方式

  • 文字和影像關聯性

  • 顯示樣式

核心事件

ToolStripItem 控件會收到自己的按兩下、滑鼠和繪製事件,而且也可以執行一些鍵盤前置處理。

圖像處理

ImageImageAlignImageIndexImageKeyImageScaling 屬性與影像處理的各個層面有關。 直接設定這些屬性,或藉由設定僅限ImageList運行時間的屬性,在控件中使用ToolStrip影像。

影像縮放取決於 和 ToolStripItem中的ToolStrip屬性互動,如下所示:

對齊方式

屬性的值 Alignment 會決定項目出現所在的 結尾 ToolStrip 。 只有當 的ToolStrip版面配置樣式設定為其中一個堆疊溢位值時,屬性Alignment才有效。

專案會依專案出現在 Items 集合中的順序放在 ToolStrip 上。 若要以程式設計方式變更專案配置的位置,請使用 Insert 方法移動集合中的專案。 這個方法會移動專案,但不會複製它。

文字和影像關聯性

屬性 TextImageRelation 會定義影像相對於 上 ToolStripItem文字的相對位置。 缺少影像、文字或兩者的專案都會被視為特殊案例,因此 ToolStripItem 不會顯示遺漏元素或元素的空白位置。

顯示樣式

DisplayStyle 可讓您設定專案的 Text 和 Image 屬性值,同時只顯示您想要的內容。 這通常只會在不同內容中顯示相同項目時變更顯示樣式。

配件類別

提供各種其他功能的類別包括:

另請參閱