Partager via


Comment : exposer un complément dans le menu Outils (Visual C#)

Lorsque vous créez un complément en utilisant l'Assistant Complément, puis sélectionnez l'option pour l'afficher en tant que commande, la commande est placée par défaut dans le menu Outils.Si vous ignorez cette option lorsque vous créez le complément, il vous suffit d'exécuter à nouveau l'Assistant Complément, d'activer l'option, puis de copier votre code existant dans le nouveau complément.

Si vous ne pouvez pas procéder de cette manière, la procédure suivante produit le même résultat.

[!REMARQUE]

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 une commande de menu à un complément existant

  1. Ajoutez ces instructions Using au fichier contenant la classe Connect.

    using Microsoft.VisualStudio.CommandBars;
    using System.Resources;
    using System.Reflection;
    using System.Globalization;
    using System.Windows.Forms;
    
  2. Modifiez la déclaration de la classe Connect pour implémenter IDTCommandTarget.

  3. Remplacez ou modifiez le code de procédure OnConnection() par le code suivant :

    public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)
    {
        _applicationObject = (DTE2)application;
        _addInInstance = (AddIn)addInInst;
        if(connectMode == ext_ConnectMode.ext_cm_UISetup)
        {
            object []contextGUIDS = new object[] { };
            Commands2 commands = (Commands2)_applicationObject.Commands;
            string toolsMenuName;
    
            try
            {
                ResourceManager resourceManager = new     
                  ResourceManager("MyAddin1.CommandBar",  
                  Assembly.GetExecutingAssembly());
                CultureInfo cultureInfo = new 
                  System.Globalization.CultureInfo
                  (_applicationObject.LocaleID);
                string resourceName = String.Concat(cultureInfo.
                  TwoLetterISOLanguageName, "Tools");
                toolsMenuName = resourceManager.GetString(resourceName);
            }
            catch
            {
                toolsMenuName = "Tools";
            }
    
            CommandBar menuBarCommandBar = 
              ((CommandBars)_applicationObject.CommandBars)
              ["MenuBar"];
    
              CommandBarControl toolsControl = 
                menuBarCommandBar.Controls[toolsMenuName];
              CommandBarPopup toolsPopup = 
                (CommandBarPopup)toolsControl;
    
              try
              {
                  Command command = commands.AddNamedCommand2
                    (_addInInstance, "MyAddin1", "MyAddin1", "Executes  
                    the command for MyAddin1", true, 59, ref 
                    contextGUIDS, (int)vsCommandStatus.
                    vsCommandStatusSupported+(int)vsCommandStatus.
                    vsCommandStatusEnabled, (int)vsCommandStyle.
                    vsCommandStylePictAndText, vsCommandControlType.
                    vsCommandControlTypeButton);
    
                  if((command != null) && (toolsPopup != null))
                  {
                         command.AddControl(toolsPopup.CommandBar, 1);
                  }
            }
            catch(System.ArgumentException)
            {
            }
        }
    }
    
  4. Ajoutez les deux procédures requises suivantes, QueryStatus et Exec :

    public void QueryStatus(string commandName, 
      vsCommandStatusTextWanted neededText, ref vsCommandStatus status, 
      ref object commandText)
    {
        if(neededText == 
          vsCommandStatusTextWanted.vsCommandStatusTextWantedNone)
        {
            if(commandName == "MyAddin1.Connect.MyAddin1")
            {
                status = (vsCommandStatus)vsCommandStatus.
                  vsCommandStatusSupported|vsCommandStatus.
                  vsCommandStatusEnabled;
                return;
            }
        }
    }
    
    public void Exec(string commandName, vsCommandExecOption 
      executeOption, ref object varIn, ref object varOut, ref bool 
      handled)
    {
        handled = false;
        if(executeOption ==  
          vsCommandExecOption.vsCommandExecOptionDoDefault)
        {
            if(commandName == "MyAddin1.Connect.MyAddin1")
            {
                handled = true;
                    System.Windows.Forms.MessageBox.
                      Show("add-in running.");
                return;
            }
        }
    }
    

    À chaque fois que vous implémentez IDTCommandTarget, vous devez ajouter ces deux procédures.Une méthode rapide consiste à sélectionner IDTCommandTarget dans la zone déroulante Nom de la classe dans le coin supérieur gauche de l'éditeur.Sélectionnez ensuite, tour à tour, chaque procédure dans la zone déroulante Nom de la méthode dans le coin supérieur droit.Les procédures vides nécessaires sont alors créées avec les paramètres corrects, auxquels vous pouvez alors ajouter le code.

    La procédure Exec est appelée lorsqu'un utilisateur clique sur votre commande de menu ; aussi, insérez à cet endroit le code que vous voulez voir s'exécuter à ce moment.

Voir aussi

Tâches

Comment : exposer un complément dans le menu Outils (Visual Basic)

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

Comment : créer un complément

Concepts

Graphique Modèle d'objet Automation