Windows フォームのデザイナ コマンドと DesignerAction オブジェクト モデル
更新 : 2007 年 11 月
デザイナ コマンドと DesignerAction オブジェクト モデルは、デザイン時にコンポーネントの一連のアクションを指定するための一般的な方法を提供します。通常、ユーザーがデザイン サーフェイスからこれらのアクションにアクセスするには、コンポーネントのスマート タグ グリフ () をクリックし、スマート タグ パネルに表示されたいずれかのアクションを選択します。このモデルは、デザイナがユーザーに対してコマンドを提供するさまざまな方法を統一します。
スマート タグ
スマート タグ機能により、コンポーネントおよびコントロールは状況依存の情報およびコマンドをユーザーに対して表示できます。スマート タグは、デザイナの動詞に代わるものと考えられます。スマート タグ パネル内にスマート タグ項目を表示することも、コンポーネントまたはコントロールに関連付けられているショートカット メニューに表示することもできるからです。
スマート タグの実装例については、「方法 : Windows フォーム コンポーネントにスマート タグを追加する」を参照してください。
デザイナ コマンド クラス
次の表は、コンポーネントおよびコントロールの開発時にデザイナ コマンドを公開する方法を示しています。
クラス |
説明 |
---|---|
コマンド ID にアタッチされているデリゲート。コマンド テキスト、仮引数、その他のメタデータは定義しません。 |
|
それ自体のテキストおよびその他のメタデータも定義するメニュー コマンド。通常、動詞はデザイナごとに提供され、デザイナに固有です。通常、デザイナの動詞は、ショートカット メニューまたはメイン メニュー バーの [表示] メニューに表示されます。 |
|
テキストおよびその他のメタデータを定義して、対象となる実行可能なアクションを示すメニュー コマンド。通常、アクションは、複数の手順から成るプロセス (コンポーネントのデータ ソースの設定など) をユーザーに提示します。 |
プッシュ モデルとプル モデル
次の表は、プログラムによってデザイナ コマンドにアクセスする 2 つのモデルを示しています。
モデル |
説明 |
---|---|
プッシュ |
デザイナは具体的なサービスを要求し、そのサービスにコマンドを追加します。 |
プル |
デザイナは提供したコマンドについて、サービスから問い合わせを受けます。 |
既存のコマンドの統一
上記のデザイナ コマンド クラスの表に示したコマンドの種類には、多くの共通点があります。DesignerAction API はこれらを統合して、デザイナのユーザーにコマンドを公開する統一されたモデルを示します。
メモ : |
---|
デザイナによっては、サポートしていないモデルがあります。デザイナは、提供されているサポートの種類を問い合わせ、それに応じて提供するコマンドを変更できます。また、すべての種類のコマンドでプッシュ モデルとプル モデルがサポートされているわけではありません。デザイナ アクションをスマート タグとして公開しないデザイナもあります。たとえば、一部のデザイナは、デザイナ アクションをツール ウィンドウ内に公開します。 |
DesignerAction オブジェクト モデル
次の表は、DesignerAction オブジェクト モデルを実装する重要なクラスの説明です。
クラス |
説明 |
---|---|
スマート タグ パネル上のパネル項目を表します。 |
|
スマート タグ パネルの作成に使用される項目の一覧を定義します。 |
|
コンポーネントの 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 フォーム コンポーネントにスマート タグを追加する