Compartir a través de


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

Los complementos de Visual Studio están desusados en Visual Studio 2013. Debe actualizar los complementos a las extensiones de VSPackage. Para obtener más información sobre la actualización, vea Preguntas más frecuentes: Convertir complementos en extensiones de VSPackage.

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 han desarrollado con la Configuración de desarrollo general activa.Para cambiar la configuración, elija la opción Importar y exportarconfiguraciones del menú Herramientas.Para obtener más información, vea Personalizar la configuración de desarrollo en Visual Studio.

Para agregar un comando de menú a un complemento existente

  1. Agregue estas instrucciones using al archivo que contiene la clase Connect.

    using Microsoft.VisualStudio.CommandBars;
    using System.Resources;
    using System.Reflection;
    using System.Globalization;
    using System.Windows.Forms;
    
  2. Cambie la declaración de la clase Connect para implementar IDTCommandTarget.

  3. Reemplace o cambie el código del procedimiento OnConnection() por lo siguiente:

    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. 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