Compartir a través de


Cómo: cambie el texto de un comando de menú

Los pasos siguientes muestran cómo cambiar la etiqueta de texto de un comando de menú utilizando código administrado y el servicio de IMenuCommandService .

Procedimiento

Para cambiar una etiqueta de comando de menú utilizando IMenuCommandService

  1. Cree un Paquete denominado, por ejemplo, MenuText. Cuando se ejecuta el asistente de VSPackage, seleccione Comando de menú y aceptan todos los valores predeterminados.

  2. En el archivo de .vstc, agregue el indicador de TextChanges el comando de menú, como se muestra en el ejemplo siguiente.

    <Button guid="guidMenuTextCmdSet" id="cmdidMyCommand" priority="0x0100" type="Button">
      <Parent guid="guidMenuTextCmdSet" id="MyMenuGroup" />
      <Icon guid="guidImages" id="bmpPic1" />
      <CommandFlag>TextChanges</CommandFlag>
      <Strings>
        <CommandName>cmdidMyCommand</CommandName>
        <ButtonText>My Command name</ButtonText>
      </Strings>
    </Button>
    
  3. En el Paquete, cree un controlador de eventos que se denomine antes de enviar el comando de menú.

    Private Sub OnBeforeQueryStatus(ByVal sender As Object, ByVal e As EventArgs)
        Dim myCommand As OleMenuCommand = TryCast(sender, OleMenuCommand)
        If myCommand IsNot Nothing Then
            myCommand.Text = "New Text" 
        End If 
    End Sub
    
    private void OnBeforeQueryStatus(object sender, EventArgs e)
    {
        var myCommand = sender as OleMenuCommand;
        if (null != myCommand)
        {
            myCommand.Text = "New Text";
        }
    }
    

    También puede actualizar el estado del comando de menú en este método cambiando Visible, Checked, y las propiedades de Enabled en el objeto de OleMenuCommand .

  4. Agregue el código que realiza las siguientes acciones cuando se inicializa el paquete VSPackage.

    1. Consulta para el servicio del comando de menú.

    2. Cree un objeto de OleMenuCommand que representa el comando de menú.

    3. Agregue el controlador de eventos de BeforeQueryStatus .

    4. El comando de menú al servicio de comando de menú. Debe cambiar MenuCommand a OleMenuCommand, como en el ejemplo siguiente.

    Dim menuCommandID As CommandID = New CommandID(GuidList.guidMenuTextCmdSet, CInt(PkgCmdIDList.cmdidMyTextCommand))
    Dim menuItem As OleMenuCommand = New OleMenuCommand(New EventHandler(AddressOf MenuItemCallback), menuCommandID)
    AddHandler menuItem.BeforeQueryStatus, AddressOf OnBeforeQueryStatus
    mcs.AddCommand(menuItem)
    
    // Create the command for the menu item.
    CommandID menuCommandID = new CommandID(GuidList.guidMenuTextCmdSet, (int)PkgCmdIDList.cmdidMyCommand);
    OleMenuCommand menuItem = new OleMenuCommand(MenuItemCallback, menuCommandID );
    menuItem.BeforeQueryStatus +=
        new EventHandler(OnBeforeQueryStatus);
    mcs.AddCommand(menuItem);
    

    Cuando utiliza la plantilla de paquete para crear un comando de menú, agregue el código necesario automáticamente. Sin embargo, declara el comando de menú como un objeto y se de MenuCommand no agrega el controlador de BeforeQueryStatus . Por consiguiente, debe cambiar la declaración del comando de menú para utilizar OleMenuCommand y agregar el controlador en la línea siguiente.

    El archivo de paquete debe incluir System.ComponentModel.Design y espacios de nombres de Microsoft.VisualStudio.Shell para tener acceso a la interfaz de IMenuCommandService y el objeto de OleMenuCommand .

Vea también

Otros recursos

Tareas comunes con los comandos, menús, barras de herramientas y