次の方法で共有


ソリューション エクスプローラー ツールバーにコマンドを追加する

このチュートリアルでは、ソリューション エクスプローラーのツールバーにボタンを追加する方法について説明します。

ツールバーまたはメニューのすべてのコマンドは、Visual Studio ではボタンと呼ばれます。 このボタンをクリックすると、コマンド ハンドラーのコードが実行されます。 通常、関連するコマンドは、1 つのグループを形成するためにグループ化されます。 メニューまたはツールバーは、グループのコンテナーとして機能します。 優先順位によって、グループ内の個々のコマンドがメニューまたはツールバーに表示される順序が決定されます。 ツールバーまたはメニューの表示を制御することによって、ボタンが表示されないようにすることができます。 .vsctファイルの <VisibilityConstraints> セクションに示されているコマンドは、関連付けられたコンテキストにのみ表示されます。 表示をグループに適用することはできません。

メニュー、ツールバー コマンド、.vsct ファイルの詳細については、「コマンド、メニュー、およびツールバー」を参照してください。

Note

コマンド テーブル構成 (.ctc) ファイルではなく、XML コマンド テーブル (.vsct) ファイルを使用して、VSPackage にメニューとコマンドを表示する方法を定義します。 詳細については、「Visual Studio コマンド テーブル (.vsct) ファイル」を参照してください。

メニュー コマンドを持つ拡張機能を作成する

SolutionToolbar という名前の VSIX プロジェクトを作成します。 ToolbarButton という名前のメニュー コマンド項目テンプレートを追加します。 この方法の詳細については、メニュー コマンドを使用した拡張機能の作成に関するページをご覧ください。

ソリューション エクスプローラー ツールバーにボタンを追加する

このチュートリアルのセクションでは、ソリューション エクスプローラーのツールバーにボタンを追加する方法について説明します。 ボタンがクリックされると、コールバック メソッドのコードが実行されます。

  1. ToolbarButtonPackage.vsct ファイルで、<Symbols> セクションに移動します。 <GuidSymbol> ノードには、パッケージ テンプレートによって生成されたメニュー グループおよびコマンドが含まれています。 このノードに <IDSymbol> 要素を追加して、コマンドを保持するグループを宣言します。

    <IDSymbol name="SolutionToolbarGroup" value="0x0190"/>
    
  2. <Groups> セクションで、既存のグループ エントリの後に、前の手順で宣言した新しいグループを定義します。

    <Group guid="guidToolbarButtonPackageCmdSet"
           id="SolutionToolbarGroup" priority="0xF000">
            <Parent guid="guidSHLMainMenu" id="IDM_VS_TOOL_PROJWIN"/>
          </Group>
    

    親 GUID:ID ペアを guidSHLMainMenuIDM_VS_TOOL_PROJWIN に設定することにより、このグループがソリューション エクスプローラーのツールバーに配置され、優先度の高い値を設定すると、他のコマンド グループの後に配置されます。

  3. <Buttons> セクションで、生成された <Button> エントリの親 ID を、前の手順で定義したグループが反映されるように変更します。 変更された <Button> 要素は次のようになります。

    <Button guid="guidToolbarButtonPackageCmdSet" id="ToolbarButtonId" priority="0x0100" type="Button">
        <Parent guid="guidToolbarButtonPackageCmdSet" id="SolutionToolbarGroup" />
        <Icon guid="guidImages" id="bmpPicStrikethrough" />
        <Strings>
            <ButtonText>Invoke ToolbarButton</ButtonText>
        </Strings>
    </Button>
    
  4. プロジェクトをビルドし、デバッグを開始します。 実験用インスタンスが表示されます。

    ソリューション エクスプローラーのツールバーに、既存のボタンの右側に新しいコマンド ボタンが表示されるはずです。 ボタン アイコンは取り消し線です。

  5. 新しいボタンをクリックします。

    ToolbarButtonPackage Inside SolutionToolbar.ToolbarButton.MenuItemCallback() というメッセージを含むダイアログ ボックスが表示されるはずです。

ボタンの表示を制御する

チュートリアルのこのセクションでは、ツールバーのボタンの表示を制御する方法について説明します。 SolutionToolbar.vsctファイルの <VisibilityConstraints> セクションで 1 つ以上のプロジェクトにコンテキストを設定することにより、プロジェクトまたはプロジェクトが開いている場合にのみ、ボタンが表示されるように制限します。

1 つ以上のプロジェクトが開いているときにボタンを表示する方法

  1. ToolbarButtonPackage.vsct<Buttons> セクションで、<Strings><Icons> タグの間の既存の <Button> 要素に 2 つのコマンド フラグを追加します。

    <CommandFlag>DefaultInvisible</CommandFlag>
    <CommandFlag>DynamicVisibility</CommandFlag>
    

    <VisibilityConstraints> セクションのエントリが有効になるように、DefaultInvisibleDynamicVisibility フラグを設定する必要があります。

  2. 2 つの <VisibilityItem> エントリを持つ <VisibilityConstraints> セクションを作成します。 新しいセクションを </Commands> 終了タグの直後に配置します。

    <VisibilityConstraints>
        <VisibilityItem guid="guidToolbarButtonPackageCmdSet"
              id="ToolbarButtonId"
              context="UICONTEXT_SolutionHasSingleProject" />
        <VisibilityItem guid="guidToolbarButtonPackageCmdSet"
              id="ToolbarButtonId"
              context="UICONTEXT_SolutionHasMultipleProjects" />
    </VisibilityConstraints>
    

    各可視性項目は、指定されたボタンが表示される条件を表します。 複数の条件を適用するには、同じボタンに対して複数のエントリを作成する必要があります。

  3. プロジェクトをビルドし、デバッグを開始します。 実験用インスタンスが表示されます。

    ソリューション エクスプローラーのツールバーに取り消し線ボタンが含まれていません。

  4. プロジェクトを含むソリューションを開きます。

    取り消し線ボタンが、ツールバーの既存のボタンの右側に表示されます。

  5. [ファイル] メニューの [ソリューションを閉じる] をクリックします。 ツールバーからボタンが消えます。

    ボタンの表示は、VSPackage が読み込まれるまで Visual Studio によって制御されます。 VSPackage が読み込まれた後、ボタンの可視性は VSPackage によって制御されます。 詳細については、「MenuCommands と OleMenuCommands の比較」を参照してください。