Windows フォームのデザイナー コマンドと DesignerAction オブジェクト モデル
デザイナー コマンドと DesignerAction オブジェクト モデルは、デザイン時にコンポーネントの一連のアクションを指定するための一般的な方法を提供します。通常、ユーザーがデザイン サーフェイスからこれらのアクションにアクセスするには、コンポーネントのスマート タグ グリフ () をクリックし、スマート タグ パネルに表示されたいずれかのアクションを選択します。このモデルは、デザイナーがユーザーに対してコマンドを提供するさまざまな方法を統一します。
スマート タグ
スマート タグ機能により、コンポーネントおよびコントロールは状況依存の情報およびコマンドをユーザーに対して表示できます。スマート タグは、デザイナーの動詞に代わるものと考えられます。スマート タグ パネル内にスマート タグ項目を表示することも、コンポーネントまたはコントロールに関連付けられているショートカット メニューに表示することもできるからです。
スマート タグの実装例については、「方法 : Windows フォーム コンポーネントにスマート タグを追加する」を参照してください。
デザイナー コマンド クラス
次の表は、コンポーネントおよびコントロールの開発時にデザイナー コマンドを公開する方法を示しています。
Class |
Description |
---|---|
コマンド ID にアタッチされているデリゲート。コマンド テキスト、仮引数、その他のメタデータは定義しません。 |
|
それ自体のテキストおよびその他のメタデータも定義するメニュー コマンド。通常、動詞はデザイナーごとに提供され、デザイナーに固有です。通常、デザイナーの動詞は、ショートカット メニューまたはメイン メニュー バーの [表示] メニューに表示されます。 |
|
テキストおよびその他のメタデータを定義して、対象となる実行可能なアクションを示すメニュー コマンド。通常、アクションは、複数の手順から成るプロセス (コンポーネントのデータ ソースの設定など) をユーザーに提示します。 |
プッシュ モデルとプル モデル
次の表は、プログラムによってデザイナー コマンドにアクセスする 2 つのモデルを示しています。
モデル |
Description |
---|---|
Push |
デザイナーは具体的なサービスを要求し、そのサービスにコマンドを追加します。 |
プル |
デザイナーは提供したコマンドについて、サービスから問い合わせを受けます。 |
既存のコマンドの統一
上記のデザイナー コマンド クラスの表に示したコマンドの種類には、多くの共通点があります。DesignerAction API はこれらを統合して、デザイナーのユーザーにコマンドを公開する統一されたモデルを示します。
[!メモ]
デザイナーによっては、サポートしていないモデルがあります。デザイナーは、提供されているサポートの種類を問い合わせ、それに応じて提供するコマンドを変更できます。また、すべての種類のコマンドでプッシュ モデルとプル モデルがサポートされているわけではありません。デザイナー アクションをスマート タグとして公開しないデザイナーもあります。たとえば、一部のデザイナーは、デザイナー アクションをツール ウィンドウ内に公開します。
DesignerAction オブジェクト モデル
次の表は、DesignerAction オブジェクト モデルを実装する重要なクラスの説明です。
Class |
Description |
---|---|
スマート タグ パネル上のパネル項目を表します。 |
|
スマート タグ パネルの作成に使用される項目の一覧を定義します。 |
|
コンポーネントの DesignerActionItem オブジェクトのコレクションを管理するデザイン時サービスを確立します。 |
|
パネル上の静的なテキスト項目を表します。DesignerActionItem から派生します。 |
|
DesignerActionList から派生したクラス内のプロパティに関連付けられているパネル項目を表します。DesignerActionItem から派生します。 |
|
DesignerActionList から派生したクラス内のメソッドに関連付けられているパネル項目を表します。DesignerActionItem から派生します。 |
|
スマート タグ パネル上の静的なヘッダー項目を表します。DesignerActionTextItem から派生します。 |
DesignerAction オブジェクト モデルの使用
コンポーネントまたはコントロールのデザイナー アクションを有効にするには、DesignerActionList 基本クラスから派生させます。この派生クラスを使用して、メニューのような UI を表すスマート タグ パネルを生成します。
派生クラスは virtualGetSortedActionItems メソッドをオーバーライドして、DesignerActionItem から派生したオブジェクトのコレクションを返します。これらのオブジェクトはパネル項目を表します。各項目は、それぞれの型に応じてパネル内に表示されます。たとえば、DesignerActionTextItem は、静的テキスト ラベルとして表示されます。DesignerActionPropertyItem および DesignerActionMethodItem 型によって表されるアクティブなパネル項目には、それぞれに対応するパブリックにアクセス可能なプロパティまたはメソッドが存在し、その項目の機能を実装します。
派生クラスが作成されたら、次の 2 つの方法でそれをコントロールに追加できます。
プル モデルの場合は、派生クラスのインスタンスを ComponentDesigner クラスの ActionLists プロパティに追加します。これにより、クラスを継承して他のアクション リストを提供し、その項目をマージできます。
プッシュ モデルの場合は、Add を呼び出して、グローバル DesignerActionService によって維持されているコレクションに派生クラスのインスタンスを追加します。これらのアクション リストは、ComponentDesigner によって維持されているコレクション内のアクション リストとマージされます。
DesignerActionPropertyItem は、対応する UITypeEditor によってデザイナー内に表示されます。DesignerActionMethodItem は、プログラマによって指定されたメソッドを呼び出すアクティブな UI 要素 (ハイパーリンクなど) によってデザイナー内に表示されます。GetSortedActionItems メソッドのアクション リストの実装は、プロパティおよびメソッドをスマート タグ パネル内に表示する順序で返します。
スマート タグの実装例については、「方法 : Windows フォーム コンポーネントにスマート タグを追加する」を参照してください。
アクション リスト内の既存の動詞
既存の DesignerVerb の実装を持つコントロールおよびコンポーネントは、自動的に DesignerActionList のサポートを受けます。デザイン環境は、コンポーネントのデザイナーにアクション リストを問い合わせます。使用可能なアクション リストがない場合は、既存の動詞に対して作成されます。
ショートカット メニューのアクション リスト項目
項目をショートカット メニューとアクション リストの両方に表示する場合は、DesignerActionMethodItem で IncludeAsDesignerVerb フラグを指定します。
Add が呼び出されると、IncludeAsDesignerVerb フラグが設定された DesignerActionMethodItem を見つけるために、アクション リストがスキャンされます。これが設定されている場合は、その項目について AddVerb メソッドを呼び出し、それをコンポーネントの動詞に追加してから、ショートカット メニューに追加します。
デザイナー コマンドの型の変更
.NET Framework Version 1.1 のMenuCommand および DesignerVerb クラスには、DesignerAction オブジェクト モデルをサポートするように多少の変更が行われました。どちらの型も Properties という名前の新しいプロパティを公開します。このプロパティは、コマンド オブジェクトのすべてのパブリック プロパティが保存されている IDictionary です。この辞書のキーはパブリック プロパティの名前です。これにより、プロパティのジェネリック列挙体が有効になり、クラス定義を変更しなくても新しいプロパティを追加できる一貫性のある基礎が提供されます。
また、MenuCommandService クラスは IMenuCommandService の標準の実装であり、正しい動詞の統合を実行します。このクラスは、コマンドに対して追加および削除を通知するイベントを発生させます。このクラスを使用すると、これらのイベントの結果に基づいて UI を作成できます。サービス コンテナーでは MenuCommandService と IMenuCommandService の両方を使用できます。
参照
処理手順
方法 : Windows フォーム コンポーネントにスマート タグを追加する