Windows フォームのデザイナー コマンドと DesignerAction オブジェクト モデル

デザイナー コマンドと DesignerAction オブジェクト モデルは、デザイン時にコンポーネントの一連のアクションを指定するための一般的な方法を提供します。通常、ユーザーがデザイン サーフェイスからこれらのアクションにアクセスするには、コンポーネントのスマート タグ グリフ (スマート タグ グリフ) をクリックし、スマート タグ パネルに表示されたいずれかのアクションを選択します。このモデルは、デザイナーがユーザーに対してコマンドを提供するさまざまな方法を統一します。

スマート タグ

スマート タグ機能により、コンポーネントおよびコントロールは状況依存の情報およびコマンドをユーザーに対して表示できます。スマート タグは、デザイナーの動詞に代わるものと考えられます。スマート タグ パネル内にスマート タグ項目を表示することも、コンポーネントまたはコントロールに関連付けられているショートカット メニューに表示することもできるからです。

スマート タグの実装例については、「方法 : Windows フォーム コンポーネントにスマート タグを追加する」を参照してください。

デザイナー コマンド クラス

次の表は、コンポーネントおよびコントロールの開発時にデザイナー コマンドを公開する方法を示しています。

Class

Description

MenuCommand

コマンド ID にアタッチされているデリゲート。コマンド テキスト、仮引数、その他のメタデータは定義しません。

DesignerVerb

それ自体のテキストおよびその他のメタデータも定義するメニュー コマンド。通常、動詞はデザイナーごとに提供され、デザイナーに固有です。通常、デザイナーの動詞は、ショートカット メニューまたはメイン メニュー バーの [表示] メニューに表示されます。

DesignerActionItem

テキストおよびその他のメタデータを定義して、対象となる実行可能なアクションを示すメニュー コマンド。通常、アクションは、複数の手順から成るプロセス (コンポーネントのデータ ソースの設定など) をユーザーに提示します。

プッシュ モデルとプル モデル

次の表は、プログラムによってデザイナー コマンドにアクセスする 2 つのモデルを示しています。

モデル

Description

Push

デザイナーは具体的なサービスを要求し、そのサービスにコマンドを追加します。

プル

デザイナーは提供したコマンドについて、サービスから問い合わせを受けます。

既存のコマンドの統一

上記のデザイナー コマンド クラスの表に示したコマンドの種類には、多くの共通点があります。DesignerAction API はこれらを統合して、デザイナーのユーザーにコマンドを公開する統一されたモデルを示します。

[!メモ]

デザイナーによっては、サポートしていないモデルがあります。デザイナーは、提供されているサポートの種類を問い合わせ、それに応じて提供するコマンドを変更できます。また、すべての種類のコマンドでプッシュ モデルとプル モデルがサポートされているわけではありません。デザイナー アクションをスマート タグとして公開しないデザイナーもあります。たとえば、一部のデザイナーは、デザイナー アクションをツール ウィンドウ内に公開します。

DesignerAction オブジェクト モデル

次の表は、DesignerAction オブジェクト モデルを実装する重要なクラスの説明です。

Class

Description

DesignerActionItem

スマート タグ パネル上のパネル項目を表します。

DesignerActionList

スマート タグ パネルの作成に使用される項目の一覧を定義します。

DesignerActionService

コンポーネントの DesignerActionItem オブジェクトのコレクションを管理するデザイン時サービスを確立します。

DesignerActionTextItem

パネル上の静的なテキスト項目を表します。DesignerActionItem から派生します。

DesignerActionPropertyItem

DesignerActionList から派生したクラス内のプロパティに関連付けられているパネル項目を表します。DesignerActionItem から派生します。

DesignerActionMethodItem

DesignerActionList から派生したクラス内のメソッドに関連付けられているパネル項目を表します。DesignerActionItem から派生します。

DesignerActionHeaderItem

スマート タグ パネル上の静的なヘッダー項目を表します。DesignerActionTextItem から派生します。

DesignerAction オブジェクト モデルの使用

コンポーネントまたはコントロールのデザイナー アクションを有効にするには、DesignerActionList 基本クラスから派生させます。この派生クラスを使用して、メニューのような UI を表すスマート タグ パネルを生成します。

派生クラスは virtualGetSortedActionItems メソッドをオーバーライドして、DesignerActionItem から派生したオブジェクトのコレクションを返します。これらのオブジェクトはパネル項目を表します。各項目は、それぞれの型に応じてパネル内に表示されます。たとえば、DesignerActionTextItem は、静的テキスト ラベルとして表示されます。DesignerActionPropertyItem および DesignerActionMethodItem 型によって表されるアクティブなパネル項目には、それぞれに対応するパブリックにアクセス可能なプロパティまたはメソッドが存在し、その項目の機能を実装します。

派生クラスが作成されたら、次の 2 つの方法でそれをコントロールに追加できます。

  • プル モデルの場合は、派生クラスのインスタンスを ComponentDesigner クラスの ActionLists プロパティに追加します。これにより、クラスを継承して他のアクション リストを提供し、その項目をマージできます。

  • プッシュ モデルの場合は、Add を呼び出して、グローバル DesignerActionService によって維持されているコレクションに派生クラスのインスタンスを追加します。これらのアクション リストは、ComponentDesigner によって維持されているコレクション内のアクション リストとマージされます。

DesignerActionPropertyItem は、対応する UITypeEditor によってデザイナー内に表示されます。DesignerActionMethodItem は、プログラマによって指定されたメソッドを呼び出すアクティブな UI 要素 (ハイパーリンクなど) によってデザイナー内に表示されます。GetSortedActionItems メソッドのアクション リストの実装は、プロパティおよびメソッドをスマート タグ パネル内に表示する順序で返します。

スマート タグの実装例については、「方法 : Windows フォーム コンポーネントにスマート タグを追加する」を参照してください。

ms171567.collapse_all(ja-jp,VS.110).gifアクション リスト内の既存の動詞

既存の DesignerVerb の実装を持つコントロールおよびコンポーネントは、自動的に DesignerActionList のサポートを受けます。デザイン環境は、コンポーネントのデザイナーにアクション リストを問い合わせます。使用可能なアクション リストがない場合は、既存の動詞に対して作成されます。

ms171567.collapse_all(ja-jp,VS.110).gifショートカット メニューのアクション リスト項目

項目をショートカット メニューとアクション リストの両方に表示する場合は、DesignerActionMethodItemIncludeAsDesignerVerb フラグを指定します。

Add が呼び出されると、IncludeAsDesignerVerb フラグが設定された DesignerActionMethodItem を見つけるために、アクション リストがスキャンされます。これが設定されている場合は、その項目について AddVerb メソッドを呼び出し、それをコンポーネントの動詞に追加してから、ショートカット メニューに追加します。

デザイナー コマンドの型の変更

.NET Framework Version 1.1 のMenuCommand および DesignerVerb クラスには、DesignerAction オブジェクト モデルをサポートするように多少の変更が行われました。どちらの型も Properties という名前の新しいプロパティを公開します。このプロパティは、コマンド オブジェクトのすべてのパブリック プロパティが保存されている IDictionary です。この辞書のキーはパブリック プロパティの名前です。これにより、プロパティのジェネリック列挙体が有効になり、クラス定義を変更しなくても新しいプロパティを追加できる一貫性のある基礎が提供されます。

また、MenuCommandService クラスは IMenuCommandService の標準の実装であり、正しい動詞の統合を実行します。このクラスは、コマンドに対して追加および削除を通知するイベントを発生させます。このクラスを使用すると、これらのイベントの結果に基づいて UI を作成できます。サービス コンテナーでは MenuCommandServiceIMenuCommandService の両方を使用できます。

参照

処理手順

方法 : Windows フォーム コンポーネントにスマート タグを追加する

関連項目

DesignerActionList

ComponentDesigner

DesignerVerb

MenuCommand

MenuCommandService

その他の技術情報

デザイン時サポートの拡張