Gewusst wie: Verfügbarmachen eines Add-Ins in einem Kontextmenü

Während Sie Add-In-Befehle mit dem Visual Studio-Automatisierungsmodell leicht zu Menüs der oberen Ebene, z. B. dem Menü Extras, hinzufügen können, gibt es auch die Möglichkeit, Befehle in Kontextmenüs und Untermenüs aufzunehmen.

Zu diesem Zweck müssen Sie jedoch das Microsoft Visual Studio Command Bar-Objektmodell verwenden, um das Zielkontextmenü oder Zieluntermenü explizit anzugeben. Anschließend müssen Sie die Visual Studio AddControl-Methode aufrufen.

Kontextmenüs sind vergleichbar mit anderen Menüs in Visual Studio. Um auf diese Menüs zuzugreifen, zeigen Sie auf einen Abwärtspfeil in einem Dropdownmenü oder klicken mit der rechten Maustaste auf ein Element in der integrierten Entwicklungsumgebung (Integrated Development Environment, IDE).

Um einem Kontextmenü (bzw. einem Menü oder einer Symbolleiste) einen Befehl hinzuzufügen, müssen Sie zuerst den Befehlsnamen kennen. Durchsuchen Sie dazu im Menü Extras im Dialogfeld Optionen den Knoten Tastatur.

Anhand des folgenden Verfahrens wird veranschaulicht, wie dem Kontextmenü der Aufgabenliste ein Add-In-Befehl hinzugefügt wird.

Tipp

Je nach den aktiven Einstellungen oder der Version unterscheiden sich die Dialogfelder und Menübefehle auf Ihrem Bildschirm möglicherweise von den in der Hilfe beschriebenen. Bei der Entwicklung dieser Verfahren war die Option Allgemeine Entwicklungseinstellungen aktiviert. Wählen Sie im Menü Extras die Option Einstellungen importieren und exportieren aus, um die Einstellungen zu ändern. Weitere Informationen finden Sie unter Arbeiten mit Einstellungen.

So fügen Sie einem Kontextmenü einen Add-In-Befehl hinzu

  1. Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Projekt.

  2. Erweitern Sie im Dialogfeld Neues Projekt die Option Andere Projekttypen, klicken Sie auf Erweiterungen und dann im Bereich Vorlagen auf Add-In für Visual Studio.

    Benennen Sie das Add-In mit ContextCmd, und klicken Sie auf OK, um den Visual Studio-Add-In-Assistenten zu starten.

  3. Wählen Sie die Option zum Erstellen einer Benutzeroberfläche für das Add-In aus, indem Sie das Kontrollkästchen Soll eine Befehlszeilen-Benutzeroberfläche für das Add-In erstellt werden? aktivieren.

    Dadurch wird der OnConnection-Methode Benutzeroberflächen-Code hinzugefügt. Zusätzlich wird die Exec-Methode hinzugefügt, durch die das Ereignis behandelt wird, sobald ein Benutzer auf den Add-In-Befehl klickt. Außerdem wird die QueryStatus-Methode hinzugefügt, die Informationen zum Status des Add-Ins bereitstellt.

  4. Ersetzen Sie den Code durch Folgendes:

    Imports System
    Imports Microsoft.VisualStudio.CommandBars
    Imports Extensibility
    Imports EnvDTE
    Imports EnvDTE80
    
    Public Class Connect
    
        Implements IDTExtensibility2
        Implements IDTCommandTarget
    
        Dim _applicationObject As DTE2
        Dim _addInInstance As AddIn
    
        Dim cmdBarCtl As CommandBarControl
    
        Public Sub New()
        End Sub
    
        Public Sub OnConnection(ByVal application As Object, ByVal _
          connectMode As ext_ConnectMode, ByVal addInInst As Object, _
          ByRef custom As Array) Implements _
          IDTExtensibility2.OnConnection
            Dim cmd As Command
            Dim cmdBar As CommandBar
    
            _applicationObject = CType(application, DTE2)
            _addInInstance = CType(addInInst, AddIn)
    
            Try
                If CType(ext_ConnectMode.ext_cm_AfterStartup Or _
                  ext_ConnectMode.ext_cm_Startup, Boolean) Then
                    ' If the command does not exist, add it.
                    If cmd Is Nothing Then
                        cmd = _applicationObject.Commands. _
                          AddNamedCommand(_addInInstance, _
                          "newCmd", "newCmd", "Runs the add-in.", _
                          True, 59, Nothing, _
                          vsCommandStatus.vsCommandStatusSupported _
                          Or vsCommandStatus.vsCommandStatusEnabled)
                    End If
    
                    ' Reference the Task List shortcut menu.
                    cmdBar = CType(_applicationObject. _
                      CommandBars.Item("Task List"), _
                      Microsoft.VisualStudio.CommandBars.CommandBar)
    
                    ' Add a command to the Task List's shortcut menu.
                    cmdBarCtl = CType(cmd.AddControl(cmdBar, _
                      cmdBar.Controls.Count + 1), _
                      Microsoft.VisualStudio.CommandBars. _
                      CommandBarControl)
                    cmdBarCtl.Caption = "A New Command"
                End If
            Catch e As System.Exception
                System.Windows.Forms.MessageBox.Show(e.ToString)
            End Try
        End Sub
    
        Public Sub OnDisconnection(ByVal disconnectMode As _
          ext_DisconnectMode, ByRef custom As Array) Implements _
          IDTExtensibility2.OnDisconnection
            Try
                ' Delete the command bar control from the 
                   ' shortcut menu.
                If Not (cmdBarCtl Is Nothing) Then
                    cmdBarCtl.Delete()
                End If
            Catch e As System.Exception
                System.Windows.Forms.MessageBox.Show(e.ToString)
            End Try
        End Sub
    
        Public Sub OnAddInsUpdate(ByRef custom As Array) Implements _
          IDTExtensibility2.OnAddInsUpdate
        End Sub
    
        Public Sub OnStartupComplete(ByRef custom As Array) Implements _
          IDTExtensibility2.OnStartupComplete
        End Sub
    
        Public Sub OnBeginShutdown(ByRef custom As Array) Implements _
          IDTExtensibility2.OnBeginShutdown
        End Sub
    
        Public Sub QueryStatus(ByVal commandName As String, ByVal _
          neededText As vsCommandStatusTextWanted, ByRef status As _
          vsCommandStatus, ByRef commandText As Object) Implements _
          IDTCommandTarget.QueryStatus
            If commandName = "ContextCmd.Connect.newCmd" Then
                status = CType(vsCommandStatus.vsCommandStatusEnabled _
                  + vsCommandStatus.vsCommandStatusSupported, _
                  vsCommandStatus)
            Else
                status = vsCommandStatus.vsCommandStatusUnsupported
            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 = "ContextCmd.Connect.newCmd" Then
                    handled = True
                    System.Windows.Forms.MessageBox.Show("Add-in _
                      running...")
                End If
            End If
        End Sub
    End Class
    
  5. Fügen Sie den Code, der beim Klicken auf den Befehl ausgeführt werden soll, in der Exec-Prozedur hinzu.

  6. Erstellen Sie das Add-In, und führen Sie es dann aus.

  7. Zeigen Sie die Aufgabenliste an, indem Sie im Menü Ansicht auf Aufgabenliste klicken.

  8. Klicken Sie im Menü Extras auf Add-In-Manager.

  9. Aktivieren Sie das Add-In mit dem Namen ContextCmd, indem Sie das daneben angezeigte Kontrollkästchen im Add-In-Manager aktivieren.

  10. Klicken Sie mit der rechten Maustaste auf die Aufgabenliste.

    Der Add-In-Befehl ContextCmd wird im Kontextmenü angezeigt.

Siehe auch

Aufgaben

Gewusst wie: Steuern von Add-Ins mit dem Add-In-Manager

Gewusst wie: Erstellen von Add-Ins

Exemplarische Vorgehensweise: Erstellen eines Assistenten

Referenz

Visual Studio-Befehle und -Schalter

Konzepte

Anzeigen von Add-Ins auf Symbolleisten und in Menüs

Add-In-Registrierung

Diagramm "Automationsobjektmodell"

Weitere Ressourcen

Erstellen von Add-Ins und Assistenten