ToolStrip クラスと ToolStripItem クラスには、ツール バー項目、ステータス項目、およびメニュー項目を表示するための柔軟で拡張性のあるシステムが実装されています。 これらのクラスはすべて System.Windows.Forms 名前空間に格納されており、通常、名前にはすべて "ToolStrip" プリフィックス (ToolStripOverflow など) または "Strip" サフィックス (MenuStrip など) が付きます。
ToolStrip
このトピックでは、ToolStrip およびこのクラスから派生するコントロールについて説明します。
ToolStrip は、MenuStrip、StatusStrip、および ContextMenuStrip の抽象基本クラスです。 次のオブジェクト モデルは、ToolStrip 継承階層構造を示しています。
ToolStrip オブジェクト モデル
ToolStrip に含まれているすべての項目には、Items コレクションを介してアクセスできます。 ToolStripDropDownItem に含まれているすべての項目には、DropDownItems コレクションを介してアクセスできます。 ToolStrip の派生クラスでは、DisplayedItems プロパティを使用して、現在表示されている項目のみにアクセスすることもできます。 これらは、現在オーバーフロー メニューにない項目です。
次の項目は、すべての方向で ToolStripSystemRenderer と ToolStripProfessionalRenderer をシームレスに操作できるように特別に設計されています。 これらは、ToolStrip コントロールのデザイン時に既定で使用できます。
MenuStrip
MenuStrip は、MainMenu に代わる最上位のコンテナーです。 これには、キー処理機能とマルチ ドキュメント インターフェイス (MDI) 機能も用意されています。 ToolStripDropDownItem および ToolStripMenuItem は ToolStripItem から派生していますが、機能的には、MenuStrip と連動します。
次の項目は、すべての位置で ToolStripSystemRenderer および ToolStripProfessionalRenderer の両方とシームレスに連動するように特別にデザインされています。 これらは、MenuStrip コントロールのデザイン時に既定で使用できます。
StatusStrip
StatusStrip は StatusBar コントロールを置き換えます。 StatusStrip の特別な機能には、カスタムのテーブル レイアウトや、フォームのサイズ変更グリップと移動グリップのサポートがあります。また、使用可能な領域を ToolStripStatusLabel で自動的に設定できる Spring プロパティもあります。
次の項目は、すべての位置で ToolStripSystemRenderer および ToolStripProfessionalRenderer の両方とシームレスに連動するように特別にデザインされています。 これらは、StatusStrip コントロールのデザイン時に既定で使用できます。
ContextMenuStrip
ContextMenuStrip は ContextMenu に代わるものです。 ContextMenuStrip は任意のコントロールに関連付けることができ、関連付けたコントロールでは、マウスの右クリックで自動的にコンテキスト メニュー (ショートカット メニュー) が表示されます。 Show を使用して、ContextMenuStrip をプログラムによって表示できます。 ContextMenuStrip では、キャンセル可能な Opening イベントと Closing イベントがサポートされているため、動的な作成や複数クリックのシナリオを処理できます。 ContextMenuStrip イメージ、メニュー項目のチェックの状態、テキスト、アクセス キー、ショートカット、およびカスケード メニューをサポートしています。
次の項目は、すべての位置で ToolStripSystemRenderer および ToolStripProfessionalRenderer の両方とシームレスに連動するように特別にデザインされています。 これらは、ContextMenuStrip コントロールのデザイン時に既定で使用できます。
ToolStrip の汎用機能
このトピックでは、ToolStrip と派生コントロールに共通の機能と動作について説明します。
描画
ToolStrip コントロールには、カスタム描画を行う方法がいくつかあります。 他の Windows フォーム コントロールと同様に、ToolStrip と ToolStripItem のどちらにも、オーバーライド可能な OnPaint メソッドと Paint イベントがあります。 通常の描画と同様に、座標系はコントロールのクライアント領域を基準としています。つまり、コントロールの左上角が 0, 0 になります。 ToolStripItem の Paint イベントと OnPaint メソッドは、他のコントロール描画イベントと同じように動作します。
ToolStrip コントロールでは、ToolStripRenderer クラスを使用することにより、項目やコンテナーの描画の細部にアクセスすることもできます。このクラスには、ToolStrip の背景、項目の背景、項目のイメージ、項目の矢印、項目のテキスト、および境界を描画するためのオーバーライド可能なメソッドがあります。 これらのメソッドのイベント引数は、四角形、色、テキスト形式など、目的に応じて調整できるいくつかのプロパティを公開します。
項目が描画される方法についてのいくつかの側面を調整するには、通常、ToolStripRenderer をオーバーライドします。
新しい項目を作成していて、描画に関するすべての側面を制御する場合には、OnPaint メソッドをオーバーライドします。 OnPaint 内から、ToolStripRenderer のメソッドを使用できます。
既定では、ToolStrip は OptimizedDoubleBuffer 設定を利用してダブル バッファリングを行います。
ペアレンティング
コンテナーの所有権とペアレンティングの概念は、他の Windows フォーム コンテナー コントロールよりも ToolStrip コントロールの方が複雑です。 これは、オーバーフローなどの動的なシナリオをサポートし、複数の ToolStrip 項目でドロップダウン項目を共有する場合や、コントロールからの ContextMenuStrip の生成をサポートする場合に必要です。
次の一覧は、ペアレンティングに関連するメンバーとその使用方法を示しています。
OwnerItem は、ドロップダウン項目のソースの項目にアクセスします。 これは SourceControl に似ていますが、コントロールを返すのではなく、ToolStripItem を返します。
SourceControl は、複数のコントロールが同じ ContextMenuStrip を共有している場合に、どのコントロールが ContextMenuStrip のソースであるかを決定します。
GetCurrentParent は、Parent プロパティの読み取り専用アクセサーです。 親は所有者とは異なり、項目が表示される現在の ToolStrip を表します。これはオーバーフロー領域の場合もあります。
Owner は、項目コレクションに現在の ToolStripItem を含む ToolStrip を返します。 この方法は、オーバーフローを処理する特別なコードを記述せずに、トップレベルの ToolStrip で ImageList や他のプロパティを参照するのに最適です。
継承したコントロールの動作
次のコントロールは、継承で使用されると常にロックされます。
ToolStripContainer のパネルなどの ToolStripPanel と個々の ToolStripPanel コントロール
たとえば、前の一覧にあるコントロールの 1 つまたは複数を使用して、新しい Windows フォーム アプリケーションを作成します。 1 つ以上のコントロールのアクセス修飾子を public または protected に設定し、プロジェクトをビルドします。 最初のフォームから継承するフォームを追加し、継承したコントロールを選択します。 このコントロールはロックされた状態で表示され、アクセス修飾子が private であるかのように動作します。
ToolStripContainer の継承のサポート
ToolStripContainer コントロールは、次の例のような限定された継承のシナリオをサポートしています。
新しい Windows フォームアプリケーションを作成します。
フォームに ToolStripContainer を追加します。
ToolStripContainer のアクセス修飾子を public または protected に設定します。
ToolStrip、MenuStrip、ContextMenuStrip の各コントロールを任意に組み合わせて、ToolStripContainer の ToolStripPanel 領域に追加します。
プロジェクトをビルドします。
最初のフォームから継承するフォームを追加します。
継承した ToolStripContainer をフォーム上で選択します。
子コントロールの継承の動作
前の手順を完了すると、次のような継承の動作が発生します。
デザイナーには、継承したアイコンと一緒にコントロールが表示されます。
ToolStripPanel コントロールはロックされます。コンテンツの選択や再配置を行うことはできません。
コントロールは、ToolStripContentPanel に追加したり移動したりできます。また、ToolStripContentPanel の子コントロールすることもできます。
変更内容はフォームのビルド後も保持されます。
注意
削除する必要がある場合は、ToolStripContainer に含まれているすべての ToolStripPanel コントロールから、アクセス修飾子を削除してください。 この場合は、ToolStripContainer のアクセス修飾子によってコントロール全体が制御されます。
部分信頼
部分的にしか信頼のない状況では、不用意に入力した個人情報が認証されていない個人やサービスから使われることのないように、ToolStrip に制限が適用されます。 次のような保護方法があります。
ToolStripDropDown コントロールで ToolStripControlHost の項目を表示するには、AllWindows が必要です。 これは、ToolStripTextBox、ToolStripComboBox、ToolStripProgressBar などの組み込みコントロールだけでなく、ユーザーが作成したコントロールにも適用されます。 この要件に適合しない場合、このような項目は表示されません。 例外をスローすることはありません。
AutoClose プロパティを false に設定することはできません。また、キャンセル可能な Closing イベント パラメーターは無視されます。 このため、ドロップダウン項目を表示したまま複数のキーストロークを入力することはできなくなります。 この要件に適合しない場合、このような項目は表示されません。 例外をスローすることはありません。
AllWindows 以外の部分信頼の状況でキーストロークが発生しても、多くのキーストローク処理イベントは生成されません。
AllWindows が付与されていない場合、アクセス キーは処理されません。
使用法
次の使用パターンは、ToolStrip のレイアウト、キーボードの対話的操作、およびエンド ユーザーの動作に影響します。
ToolStripPanel への追加
ToolStrip は、ToolStripPanel 内および ToolStripPanel 間に移動できます。 Dock プロパティは無視されます。また、Stretch プロパティが false の場合は、項目が ToolStripPanel に追加されるたびに ToolStrip のサイズが増加します。 通常、ToolStrip はタブ オーダーに含められません。
ドッキング
ToolStrip はコンテナーの一辺の固定位置に配置され、サイズがドッキング対象の辺全体に拡張されます。 通常、ToolStrip はタブ オーダーに含められません。
絶対配置
他のコントロールと同様に、ToolStrip は Location プロパティによって配置され、サイズが固定され、通常はタブ オーダーに含められます。
キーボードによる対話操作
アクセス キー
Alt キーと同時または Alt キーに続けてアクセス キーを入力する操作は、キーボードを使用してコントロールをアクティブ化する 1 つの方法です。 ToolStrip では、明示的および暗黙的なアクセス キーの両方がサポートされます。 明示的な定義では、文字の前にアンパサンド (&) 文字を付けます。 暗黙的な定義では、指定された Text プロパティの文字の順序に基づいて、一致する項目を検出するアルゴリズムが使用されます。
ショートカット キー
MenuStrip で使用するショートカット キーは、Keys 列挙値 (順序が特定されているわけではありません) の組み合わせを使用して定義します。 また、ShortcutKeyDisplayString プロパティを使用すると、テキストのみを使用してショートカット キーを表示できます。たとえば、"Delete" の代わりに "Del" と表示できます。
Navigation
Alt キーは、MainMenuStrip で指定される MenuStrip をアクティブ化します。 この状態で Ctrl + Tab キーを使用すると、ToolStripPanel 内の ToolStrip コントロール間を移動できます。 Tab キーおよびテンキーの方向キーを使用すると、ToolStrip の項目間を移動できます。 オーバーフロー領域の移動は、特別なアルゴリズムによって処理されます。 Space キーを押すと、ToolStripButton、ToolStripDropDownButton、または ToolStripSplitButton が選択されます。
フォーカスと検証
Alt キーで MenuStrip または ToolStrip をアクティブ化しても、通常、現在フォーカスがあるコントロールからフォーカスが移動したり削除されたりすることはありません。 MenuStrip 内でホストされているコントロールまたは MenuStrip のドロップダウンがある場合、ユーザーが Tab キーを押すとコントロールはフォーカスを取得します。 一般的に、MenuStrip の GotFocus、LostFocus、Enter、Leave の各イベントは、キーボードでアクティブ化した場合は発生しません。 このような場合は、代わりに MenuActivate イベントと MenuDeactivate イベントを使用します。
既定では、CausesValidation は false に設定されています。 検証を実行するには、フォームで明示的に Validate を呼び出します。
[レイアウト]
ToolStrip のレイアウトを制御するには、LayoutStyle プロパティで ToolStripLayoutStyle のメンバーの 1 つを選択します。
スタック レイアウト
スタックとは、ToolStrip の両端が互いに密着するように項目を配置することです。 次の一覧に、スタック レイアウトの説明を示します。
StackWithOverflow が既定値です。 この設定により、ToolStrip は、Orientation プロパティに従ってそのレイアウトを自動的に変更し、ドラッグおよびドッキングのシナリオに対応します。
VerticalStackWithOverflow は、ToolStrip の項目を縦方向に並べて描画します。
HorizontalStackWithOverflow は、ToolStrip の項目を横方向に並べて描画します。
スタック レイアウトのその他の機能
Alignment は、項目が配置される ToolStrip の末尾を決定します。
項目が ToolStrip 内に収まらない場合は、オーバーフロー ボタンが自動的に表示されます。 Overflow プロパティの設定によって、項目を常にオーバーフロー領域に表示する、必要な場合のみ表示する、または表示しないのいずれかに決定します。
LayoutCompleted イベントでは、Placement プロパティを調べ、項目がメインの ToolStrip とオーバーフロー状態の ToolStrip のどちらに配置されているか、または現在はまったく表示されていないかを確認できます。 項目が表示されない典型的な理由は、項目がメインの ToolStrip に収まらず、その Overflow プロパティが Never に設定されていることです。
ToolStrip を移動できるようにするには、これを ToolStripPanel に配置し、その GripStyle を Visible に設定します。
その他のレイアウト オプション
その他のレイアウト オプションとして、Flow および Table があります。
フロー レイアウト
ContextMenuStrip、ToolStripDropDownMenu、および ToolStripOverflow の場合は、Flow が既定のレイアウトです。 このレイアウトは、FlowLayoutPanel に似ています。 Flow レイアウトの機能は次のとおりです。
LayoutSettings プロパティによって、FlowLayoutPanel のすべての機能が公開されています。 LayoutSettings クラスを FlowLayoutSettings クラスにキャストする必要があります。
Alignment プロパティは無視されます。
LayoutCompleted イベントでは、Placement プロパティを調べ、項目がメインの ToolStrip に配置されたか、収まらなかったかを確認できます。
グリップが描画されないため、ToolStripPanel にある Flow レイアウト スタイルの ToolStrip を移動できません。
テーブル レイアウト
StatusStrip の場合は、Table が既定のレイアウトです。 このレイアウトは、TableLayoutPanel に似ています。 Flow レイアウトの機能は次のとおりです。
LayoutSettings プロパティによって、TableLayoutPanel のすべての機能が公開されています。 LayoutSettings クラスを TableLayoutSettings クラスにキャストする必要があります。
Alignment プロパティは無視されます。
LayoutCompleted イベントでは、Placement プロパティを調べ、項目がメインの ToolStrip に配置されたか、収まらなかったかを確認できます。
グリップが描画されないため、ToolStripPanel の Table レイアウト スタイルでは ToolStrip を削除できません。
ToolStripItem
このトピックでは、ToolStripItem およびこのクラスから派生するコントロールについて説明します。
ToolStripItem は、ToolStrip に追加されるすべての項目に対する抽象基本クラスです。 次のオブジェクト モデルは、ToolStripItem 継承階層構造を示しています。
ToolStripItem オブジェクト モデル
ToolStripItem クラスは、ToolStripItem から直接継承するか、ToolStripControlHost または ToolStripDropDownItem を介して ToolStripItem から間接的に継承します。
ToolStripItem コントロールは、ToolStrip、MenuStrip、StatusStrip、または ContextMenuStrip に格納される必要があり、フォームに直接追加できません。 ToolStripItem コントロールの適切なサブセットを含むさまざまなコンテナー クラスが設計されています。
ToolStripItem ストック コントロールおよびこれらのコントロールが最適に表示されるコンテナーを次の表に示します。 ToolStrip 項目は ToolStrip の派生コンテナーであればどれでもホストできますが、以下に示すコンテナー内で最適に表示されるように設計されています。
注意
ToolStripDropDown は、デザイナー ツールボックスには表示されません。
含まれる項目 |
ToolStrip |
MenuStrip |
ContextMenuStrip |
StatusStrip |
ToolStripDropDown |
---|---|---|---|---|---|
○ |
× |
× |
× |
○ |
|
○ |
○ |
○ |
× |
○ |
|
○ |
× |
× |
○ |
○ |
|
○ |
× |
× |
○ |
○ |
|
○ |
○ |
○ |
× |
○ |
|
○ |
× |
× |
○ |
○ |
|
○ |
○ |
○ |
× |
○ |
|
× |
○ |
○ |
× |
× |
|
× |
× |
× |
○ |
× |
|
○ |
X |
× |
○ |
X |
|
○ |
○ |
× |
○ |
[はい] |
ToolStripButton
ToolStripButton は ToolStrip のボタン項目です。 さまざまな境界線スタイルで表示でき、操作状態を表したりアクティブ化したりするためにも使用できます。 既定でフォーカスが設定されるように定義することもできます。
ToolStripLabel
ToolStripLabel は、ToolStrip コントロールにラベル機能を提供します。 ToolStripLabel は ToolStripButton と似ており、既定ではフォーカスが設定されず、押下または強調表示された状態として描画されることもありません。
ホストされる項目としての ToolStripLabel では、アクセス キーがサポートされます。
ToolStrip でリンク コントロールをサポートするには、ToolStripLabel の LinkColor、LinkVisited、LinkBehavior の各プロパティを使用します。
ToolStripStatusLabel
ToolStripStatusLabel は、StatusStrip で使用するように特別に設計されたバージョンの ToolStripLabel です。 固有の機能として、BorderStyle、BorderSides、および Spring があります。
ToolStripSeparator
ToolStripSeparator は、ツール バーまたはメニューの方向に応じて、縦線または横線を追加します。 メニュー項目など、項目間のグループ化や区切りに使用できます。
ToolStripSeparator を追加するには、デザイン時にドロップダウン リストから選択します。 ただし、デザイナーのテンプレート ノードまたは Add メソッドでハイフン (-) を入力することで、自動的に ToolStripSeparator を作成することもできます。
ToolStripControlHost
ToolStripControlHost は、ToolStripComboBox、ToolStripTextBox、および ToolStripProgressBar の抽象基本クラスです。 ToolStripControlHost は、カスタム コントロールを含む他のコントロールを次の 2 つの方法でホストできます。
Control から派生するクラスを使用して ToolStripControlHost を構築します。 ホストされるコントロールおよびプロパティに完全にアクセスするには、Control プロパティをキャストして、このプロパティが表す実際のクラスに戻す必要があります。
ToolStripControlHost を拡張し、継承クラスの既定のコンストラクター内で、Control から派生したクラスを渡す基本クラス コンストラクターを呼び出します。 このオプションを使用して一般的なコントロール メソッドとプロパティをラップすると、ToolStrip 内でのアクセスが簡単になります。
ToolStripComboBox
ToolStripComboBox は、ToolStrip でホストするために最適化された ComboBox です。 ホストされるコントロールのプロパティとイベントのサブセットは ToolStripComboBox レベルで公開されますが、基になる ComboBox コントロールは ComboBox プロパティを使用して完全にアクセスできます。
ToolStripTextBox
ToolStripTextBox は、ToolStrip でホストするために最適化された TextBox です。 ホストされるコントロールのプロパティとイベントのサブセットは ToolStripTextBox レベルで公開されますが、基になる TextBox コントロールは TextBox プロパティを使用して完全にアクセスできます。
ToolStripProgressBar
ToolStripProgressBar は、ToolStrip でホストするために最適化された ProgressBar です。 ホストされるコントロールのプロパティとイベントのサブセットは ToolStripProgressBar レベルで公開されますが、基になる ProgressBar コントロールは ProgressBar プロパティを使用して完全にアクセスできます。
ToolStripDropDownItem
ToolStripDropDownItem は、ToolStripMenuItem、ToolStripDropDownButton、および ToolStripSplitButton の抽象基本クラスです。項目を直接ホストしたり、ドロップダウン コンテナーで追加項目をホストしたりできます。 これを実行するには、DropDown プロパティを ToolStripDropDown に設定して、ToolStripDropDown の Items プロパティを設定します。 これらのドロップダウン項目には、DropDownItems プロパティを使用して直接アクセスできます。
ToolStripMenuItem
ToolStripMenuItem は、ToolStripDropDownMenu や ContextMenuStrip と連携して、メニューの特殊な強調表示、レイアウト、および列の配置を処理する ToolStripDropDownItem です。
ToolStripDropDownButton
ToolStripDropDownButton は ToolStripButton に似ていますが、ユーザーがクリックするとドロップダウン領域が表示される点が異なります。 ShowDropDownArrow プロパティを設定することで、ドロップダウン矢印を表示または非表示にできます。 ToolStripDropDownButton は、ToolStrip をオーバーフローする項目を表示する ToolStripOverflowButton をホストします。
ToolStripSplitButton
ToolStripSplitButton は、ボタンとドロップダウン ボタンの機能を組み合わせます。
DefaultItem プロパティを使用して、選択されたドロップダウン項目に対応する Click イベントと、ボタンに表示される項目とを同期します。
ToolStripItem の汎用機能
ToolStripItem には、次のように、継承するコントロールに共通の機能とオプションがあります。
コア イベント
イメージ処理
[配置]
テキストとイメージの関係
表示スタイル
コア イベント
ToolStripItem では、自身に対するクリック イベント、マウス イベント、および描画イベントを受け取り、なんらかのキーボードの前処理を実行することもできます。
イメージ処理
Image、ImageAlign、ImageIndex、ImageKey、ImageScaling の各プロパティは、イメージ処理のさまざまな要素に関連しています。 ToolStrip コントロールでイメージを使用するには、これらのプロパティを手動で設定するか、実行時のみに有効な ImageList プロパティを設定します。
イメージのスケーリングは、次のように、ToolStrip および ToolStripItem の両方のプロパティの相互作用によって決まります。
ImageScalingSize は、イメージの ImageScaling の設定とコンテナーの AutoSize の設定の組み合わせによって決まる、最終的なイメージのスケールです。
AutoSize が true (既定) で ToolStripItemImageScaling が SizeToFit の場合、イメージの拡大と縮小は行われず、ToolStrip のサイズは最大の項目と同じサイズまたは定義済みの最小サイズになります。
AutoSize が false で ToolStripItemImageScaling が None の場合、イメージや ToolStrip の拡大と縮小は行われません。
[配置]
Alignment プロパティの値は、項目を表示する ToolStrip の辺を決定します。 Alignment プロパティが機能するのは、ToolStrip のレイアウト スタイルがスタック オーバーフロー値のいずれかに設定されている場合のみです。
項目は、項目コレクションに表示される順序で ToolStrip に配置されます。 項目を配置する場所をプログラムで変更するには、Insert メソッドを使用してコレクションの項目を移動します。 このメソッドは項目を移動しますが、複製はしません。
テキストとイメージの関係
TextImageRelation プロパティは、ToolStripItem 上のテキストに対するイメージの相対的位置を定義します。 イメージ、テキスト、またはその両方がない項目は、ToolStripItem で存在しない要素の代わりに空白が表示されないように、特別なケースとして扱われます。
表示スタイル
DisplayStyle を使用すると、項目の Text プロパティと Image プロパティの値を設定して必要なものだけを表示できます。 これは通常、同じ項目を異なるコンテキストで表示するとき、表示スタイルだけを変更するために使用されます。
アクセサリ クラス
次のように、他にもさまざまな機能を実現するクラスがあります。
ToolStripManager は、アプリケーション全体について ToolStrip 関連のタスクをサポートします。たとえば、マージ、設定、レンダラーのオプションなどがあります。
ToolStripRenderer を使用すると、特定のスタイルやテーマを簡単に ToolStrip に適用できます。
ToolStripProfessionalRenderer は、置き換えることのできるカラー テーブル (ProfessionalColorTable) に基づいてペンとブラシを作成します。
ToolStripSystemRenderer は、システム カラーとフラットな visual スタイルを ToolStrip アプリケーションに適用します。
ToolStripContainer は SplitContainer と似ています。 ドッキング対象の 4 つのサイド パネル (ToolStripPanel のインスタンス) と、1 つのセントラル パネル (ToolStripContentPanel のインスタンス) を使用して、一般的な配置が作成されます。 サイド パネルは削除できませんが、非表示にすることはできます。 セントラル パネルを削除または非表示にすることはできません。 1 つ以上の ToolStrip コントロール、MenuStrip コントロール、または StatusStrip コントロールをサイド パネルに配置でき、他のコントロールにはセントラル パネルを使用できます。 ToolStripContentPanel には、フォーム本体にレンダラーのサポートを取り入れ、一貫した状態で表示する方法も用意されています。 ToolStripContainer はマルチ ドキュメント インターフェイス (MDI) をサポートしていません。
ToolStripPanel は、ToolStrip コントロールを移動および配置する領域を作成します。 1 つのパネルだけを使用することもできますが、ToolStripPanel は MDI のシナリオにも適しています。
参照
参照
ToolStrip コントロールの概要 (Windows フォーム)
概念
その他の技術情報
ToolStrip コントロール (Windows フォーム)