次の方法で共有


方法: ツール メニューにアドインを表示する (Visual Basic)

アドイン ウィザードを使用してアドインを作成し、作成したアドインをコマンドとして表示するオプションを選択すると、そのコマンドは既定で [ツール] メニューに表示されます。アドインの作成時にこのオプションを選択しなかった場合でも、再度アドイン ウィザードを実行するだけで、このオプションを選択し、既存のコードを新しいアドインにコピーできます。

この操作を行うことができない場合、次に示す手順によっても同じ効果が得られます。

[!メモ]

実際に画面に表示されるダイアログ ボックスとメニュー コマンドは、アクティブな設定またはエディションによっては、ヘルプの説明と異なる場合があります。ここに記載されている手順は、全般的な開発設定が適用されているものとして記述されています。設定を変更するには、[ツール] メニューの [設定のインポートとエクスポート] をクリックします。詳細については、「Visual Studio の設定」を参照してください。

メニュー コマンドを既存のアドインに追加するには

  1. アドインの Connect クラスに、Implements IDTCommandTarget のコードを追加します。

    これにより、コマンドの作成に必要な IDTCommandTarget コマンド インターフェイスにアクセスできるようになります。

  2. OnConnection プロシージャに次のコードを追加します。

    Imports System
    Imports Microsoft.VisualStudio.CommandBars
    Imports Extensibility
    Imports EnvDTE
    Imports EnvDTE80
    
    _applicationObject = CType(application, DTE2)
    _addInInstance = CType(addInInst, AddIn)
    If connectMode = ext_ConnectMode.ext_cm_Startup Then
        Dim commands As Commands2 = CType(_applicationObject.Commands, _
          Commands2)
        Dim toolsMenuName As String
        Try
            Dim resourceManager As System.Resources.ResourceManager = _
            New System.Resources.ResourceManager _
             ("MyAddin1.CommandBar", System.Reflection.Assembly. _
             GetExecutingAssembly())
    
            Dim cultureInfo As System.Globalization.CultureInfo = New _
             System.Globalization.CultureInfo(_applicationObject. _
             LocaleID)
            toolsMenuName = resourceManager.GetString(String.Concat _
              (cultureInfo.TwoLetterISOLanguageName, "Tools"))
    
        Catch e As Exception
            toolsMenuName = "Tools"
        End Try
    
        Dim commandBars As CommandBars = _
          CType(_applicationObject.CommandBars, CommandBars)
        Dim menuBarCommandBar As CommandBar = _
          commandBars.Item("MenuBar")
    
        Dim toolsControl As CommandBarControl = _
          menuBarCommandBar.Controls.Item(toolsMenuName)
        Dim toolsPopup As CommandBarPopup = CType(toolsControl, _
          CommandBarPopup)
    
        Try
            Dim command As Command = _
              commands.AddNamedCommand2(_addInInstance, "MyAddin1", _
              "MyAddin1", "Executes the command for MyAddin1", True, _
              59, Nothing, CType(vsCommandStatus. _
              vsCommandStatusSupported, Integer) + _
              CType(vsCommandStatus.vsCommandStatusEnabled,  _
              Integer), vsCommandStyle.vsCommandStylePictAndText, _
              vsCommandControlType.vsCommandControlTypeButton)
    
           command.AddControl(toolsPopup.CommandBar, 1)
        Catch argumentException As System.ArgumentException
        End Try
    End If
    

    このコードは、Visual Studio でアドインが読み込まれる (アドインに "接続される") ときに実行されます。このコードにより、アドインが ext_cm_UISetup の ext_ConnectMode 値を使用して読み込まれたかどうかが判断されます。これは、アドインがインストール後初めて起動されたことを意味します。該当する場合、AddNamedCommand メソッドによって、このアドインに対するコマンドが [ツール] メニューに作成されます。詳細については、「方法 : コマンドを追加、処理する」を参照してください。

  3. Connect クラスに次の 2 つのプロシージャを追加します。

    QueryStatus メソッドは、コマンドが使用できるかどうかの状態が更新されたときに呼び出されます。Exec メソッドはコマンドの起動時に呼び出されます。

    Public Sub QueryStatus(ByVal commandName As String,  _
      ByVal neededText As vsCommandStatusTextWanted, ByRef status As _
      vsCommandStatus, ByRef commandText As Object) Implements _
      IDTCommandTarget.QueryStatus
        If neededText = vsCommandStatusTextWanted. _
          vsCommandStatusTextWantedNone Then
            If commandName = "MyAddin1.Connect.MyAddin1" Then
                status = CType(vsCommandStatus.vsCommandStatusEnabled _
                  + vsCommandStatus.vsCommandStatusSupported, _
                  vsCommandStatus)
            Else
                status = vsCommandStatus.vsCommandStatusUnsupported
            End If
        End If
    End Sub
    
    Public Sub Exec(ByVal commandName As String, ByVal executeOption _
      As vsCommandExecOption, ByRef varIn As Object, ByRef varOut As _
      Object, ByRef handled As Boolean) Implements IDTCommandTarget.Exec
        handled = False
        If executeOption = vsCommandExecOption. _
          vsCommandExecOptionDoDefault Then
            If commandName = "MyAddin1.Connect.MyAddin1" Then
                handled = True
                Exit Sub
            End If
        End If
    End Sub
    

    IDTCommandTarget を実装する際は必ずこの 2 つのプロシージャを追加する必要があります。この操作を簡単に行うには、エディターの左上隅にある [クラス名] ボックスの一覧の [IDTCommandTarget] を選択します。次に、右上隅にある [メソッド名] ボックスの一覧のプロシージャを 1 つずつ順に選択します。これにより、必要な空のプロシージャが、適切なパラメーターが指定された状態で 2 つ作成されます。これに後からコードを追加できます。

    Exec プロシージャは、ユーザーがメニュー コマンドをクリックしたときに呼び出されます。そのため、このプロシージャにはそのときに実行するコードを挿入してください。

参照

処理手順

方法: ツール メニューにアドインを表示する (Visual C#)

方法: アドイン マネージャーを使用してアドインを制御する

方法 : アドインを作成する

概念

オートメーション オブジェクト モデルの階層図