Compartir a través de


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

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 componente, puede volver a ejecutar el Asistente para complementos, activar dicha opción y, a continuación, copiar el código existente en el nuevo complemento.

Si no es posible, sin embargo, pruebe con el procedimiento que aparece a continuación.

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 la configuración activa o la edición. 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. En la clase Connect del complemento, agregue Implements IDTCommandTarget.

    De esta forma, se obtiene acceso a la interfaz de comandos IDTCommandTarget, acción necesaria para crear los comandos.

  2. En el procedimiento OnConnection, agregue lo siguiente:

    Imports System
    Imports Microsoft.VisualStudio.CommandBars
    Imports Extensibility
    Imports EnvDTE
    Imports EnvDTE80
    
    _applicationObject = CType(application, DTE2)
    _addInInstance = CType(addInInst, AddIn)
    If connectMode = ext_ConnectMode.ext_cm_UISetup Then
        Dim commands As Commands2 = CType(_applicationObject.Commands, _
          Commands2)
        Dim toolsMenuName As String
        Try
            Dim resourceManager As System.Resources.ResourceManager = _
            New System.Resources.ResourceManager _
             ("MyAddin1.CommandBar", System.Reflection.Assembly. _
             GetExecutingAssembly())
    
            Dim cultureInfo As System.Globalization.CultureInfo = New _
             System.Globalization.CultureInfo(_applicationObject. _
             LocaleID)
            toolsMenuName = resourceManager.GetString(String.Concat _
              (cultureInfo.TwoLetterISOLanguageName, "Tools"))
    
        Catch e As Exception
            toolsMenuName = "Tools"
        End Try
    
        Dim commandBars As CommandBars = _
          CType(_applicationObject.CommandBars, CommandBars)
        Dim menuBarCommandBar As CommandBar = _
          commandBars.Item("MenuBar")
    
        Dim toolsControl As CommandBarControl = _
          menuBarCommandBar.Controls.Item(toolsMenuName)
        Dim toolsPopup As CommandBarPopup = CType(toolsControl, _
          CommandBarPopup)
    
        Try
            Dim command As Command = _
              commands.AddNamedCommand2(_addInInstance, "MyAddin1", _
              "MyAddin1", "Executes the command for MyAddin1", True, _
              59, Nothing, CType(vsCommandStatus. _
              vsCommandStatusSupported, Integer) + _
              CType(vsCommandStatus.vsCommandStatusEnabled,  _
              Integer), vsCommandStyle.vsCommandStylePictAndText, _
              vsCommandControlType.vsCommandControlTypeButton)
    
           command.AddControl(toolsPopup.CommandBar, 1)
        Catch argumentException As System.ArgumentException
        End Try
    End If
    

    Este código se ejecuta cuando el complemento se carga ("conecta") en Visual Studio. Se determina si el complemento se cargó con un valor ext_ConnectMode de ext_cm_UISetup. Es decir, el complemento se inició por primera vez desde que se instaló. Si es correcto, se crea un comando para él en el menú Herramientas a través del método AddNamedCommand. Para obtener más información, vea Cómo: Agregar y controlar comandos.

  3. Agregue los dos procedimientos siguientes a la clase Connect.

    Cuando se actualiza la disponibilidad del comando, se llama al método QueryStatus. Cuando se invoca el comando, se llama al método Exec.

    Public Sub QueryStatus(ByVal commandName As String,  _
      ByVal neededText As vsCommandStatusTextWanted, ByRef status As _
      vsCommandStatus, ByRef commandText As Object) Implements _
      IDTCommandTarget.QueryStatus
        If neededText = vsCommandStatusTextWanted. _
          vsCommandStatusTextWantedNone Then
            If commandName = "MyAddin1.Connect.MyAddin1" Then
                status = CType(vsCommandStatus.vsCommandStatusEnabled _
                  + vsCommandStatus.vsCommandStatusSupported, _
                  vsCommandStatus)
            Else
                status = vsCommandStatus.vsCommandStatusUnsupported
            End If
        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 = "MyAddin1.Connect.MyAddin1" Then
                handled = True
                Exit Sub
            End If
        End If
    End Sub
    

    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 C#)

Cómo: Controlar complementos con el Administrador de complementos

Cómo: Crear un complemento

Conceptos

Gráfico del modelo de objetos de automatización