Partager via


Comment : exposer un complément dans un menu contextuel

Les compléments Visual Studio sont déconseillés dans Visual Studio 2013. Vous devriez mettre vos compléments à niveau vers des extensions VSPackage. Pour plus d'informations sur les mises à jour, consultez FAQ : conversion de compléments en extensions VSPackage.

Le modèle Automation de Visual Studio permet de placer facilement les commandes de complément dans les menus de niveau supérieur, comme le menu Outils, mais vous pouvez également ajouter des commandes aux menus et sous-menus contextuels.

Pour cela, vous devez néanmoins utiliser le modèle objet de la barre de commandes Microsoft Visual Studio afin de définir explicitement le menu et le sous-menu contextuels cibles. Vous devez ensuite appeler la méthode Visual Studio AddControl.

Les menus contextuels sont semblables aux autres menus de Visual Studio. Pour y accéder, pointez sur une flèche Bas d'un menu déroulant ou cliquez avec le bouton droit sur un élément de l'environnement de développement intégré (IDE).

Pour ajouter une commande à un menu contextuel (ou un menu ou une barre d'outils), vous devez d'abord connaître le nom de la commande. Vous pouvez le rechercher dans le nœud Clavier de la boîte de dialogue Options, à partir du menu Outils.

La procédure suivante montre comment ajouter une commande relative à un complément au menu contextuel de la Liste des tâches.

Notes

Les boîtes de dialogue et les commandes de menu qui s'affichent peuvent être différentes de celles qui sont décrites dans l'aide, en fonction de vos paramètres actifs ou de l'édition utilisée.Ces procédures ont été développées avec les paramètres de développement généraux actifs.Pour modifier vos paramètres, sélectionnez Importation et exportationde paramètres dans le menu Outils.Pour plus d'informations, consultez Paramètres Visual Studio.

Pour ajouter à un menu contextuel une commande relative à un complément

  1. Dans le menu Fichier, pointez sur Nouveau, puis cliquez sur Projet.

  2. Dans la boîte de dialogue Nouveau projet, développez Autres types de projets et cliquez sur Extensibilité, puis sur Complément Visual Studio dans le volet Modèles.

    Nommez le complément ContextCmd et cliquez sur OK pour démarrer l'Assistant Complément Visual Studio.

  3. Sélectionnez l'option de création d'une interface utilisateur pour le complément en activant la case à cocher Souhaitez-vous créer une interface utilisateur de barre de commandes pour votre complément ?.

    Cette opération ajoute un code d'interface utilisateur à la méthode OnConnection. Elle ajoute également la méthode Exec qui gère l'événement lorsqu'un utilisateur clique sur la commande relative au complément, et la méthode QueryStatus qui fournit des informations sur l'état du complément.

  4. Remplacez le code par la ligne suivante :

    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. Ajoutez le code qui doit s'exécuter lorsqu'un clic est effectué sur la commande dans la procédure Exec.

  6. Générez le complément, puis exécutez-le.

  7. Affichez la liste des tâches en cliquant sur Liste des tâches dans le menu Affichage.

  8. Dans le menu Outils, cliquez sur Gestionnaire de compléments.

  9. Activez le complément ContextCmd en activant la case à cocher située en regard du complément dans le Gestionnaire de compléments.

  10. Cliquez avec le bouton droit sur la Liste des tâches.

    La commande relative au complément ContextCmd apparaît dans le menu contextuel.

Voir aussi

Tâches

Comment : contrôler des compléments avec le Gestionnaire de compléments

Comment : créer un complément

Procédure pas à pas : création d'un Assistant

Concepts

Affichage des compléments dans les barres d'outils et les menus

Inscription d'un complément

Graphique Modèle d'objet Automation

Autres ressources

Création de compléments et d'Assistants

Commandes et commutateurs Visual Studio