Compartir a través de


Cómo: Mostrar un complemento en el menú Herramientas (Visual C#)

Actualización: noviembre 2007

Cuando se crea un complemento mediante el Asistente para complementos y se selecciona la opción de mostrarlo como comando, este comando se encuentra, de forma predeterminada, en el menú Herramientas. Sin embargo, si omite esta opción al crear el complemento, simplemente ejecute de nuevo el Asistente para complementos, active esa opción y luego copie el código existente en el nuevo complemento.

No obstante, si no es posible, el procedimiento siguiente genera el mismo resultado.

Nota:

Los cuadros de diálogo y comandos de menú que se ven pueden diferir de los descritos en la Ayuda, en función de los valores de configuración o de edición activos. Estos procedimientos se desarrollaron con la Configuración general de desarrollo activa. Para cambiar la configuración, elija la opción Importar y exportarconfiguraciones del menú Herramientas. Para obtener más información, vea Valores de configuración de Visual Studio.

Para agregar un comando de menú a un complemento existente

  1. Reemplace o cambie la clase Connect y el código de procedimiento OnConnection() del complemento por lo siguiente:

    using Microsoft.VisualStudio.CommandBars;
    using System.Resources;
    using System.Reflection;
    using System.Globalization;
    
    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)
            {
            }
        }
    }
    
  2. Agregue los dos procedimientos necesarios siguientes, QueryStatus y 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;
            }
        }
    }
    

    Cada vez que implemente IDTCommandTarget, debe agregar estos dos procedimientos. Una forma rápida de hacerlo es seleccionar IDTCommandTarget en el cuadro de lista desplegable Nombre de clase en la esquina superior izquierda del editor. Seleccione, a su vez, cada procedimiento del cuadro de lista desplegable Nombre del método en la esquina superior derecha. De esta forma, se crean los procedimientos vacíos necesarios con los parámetros correctos a los que puede agregar código.

    Cuando un usuario hace clic en el comando de menú, se llama al procedimiento Exec; por lo tanto, inserte aquí el código que desee ejecutar en ese momento.

Vea también

Tareas

Cómo: Mostrar un complemento en el menú Herramientas (Visual Basic)

Cómo: Controlar complementos con el Administrador de complementos

Cómo: Crear un complemento

Conceptos

Gráfico del modelo de objetos de automatización