Compartir a través de


Cambiar el texto de un comando de menú

En los pasos siguientes se muestra cómo cambiar la etiqueta de texto de un comando de menú mediante el IMenuCommandService servicio .

Cambio de una etiqueta de comando de menú con IMenuCommandService

  1. Cree un proyecto VSIX denominado MenuText con un comando de menú denominado ChangeMenuText. Para obtener más información, vea Crear una extensión con un comando de menú.

  2. En el archivo .vsct , agregue la TextChanges marca al comando de menú, como se muestra en el ejemplo siguiente.

    <Button guid="guidChangeMenuTextPackageCmdSet" id="ChangeMenuTextId" priority="0x0100" type="Button">
        <Parent guid="guidChangeMenuTextPackageCmdSet" id="MyMenuGroup" />
        <Icon guid="guidImages" id="bmpPic1" />
        <CommandFlag>TextChanges</CommandFlag>
        <Strings>
            <ButtonText>Invoke ChangeMenuText</ButtonText>
        </Strings>
    </Button>
    
  3. En el archivo ChangeMenuText.cs , cree un controlador de eventos al que se llamará antes de que se muestre el comando de menú.

    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 las Visiblepropiedades , Checkedy Enabled en el OleMenuCommand objeto .

  4. En el constructor ChangeMenuText, reemplace el código de inicialización y colocación del comando original por código que crea un OleMenuCommand (en lugar de un MenuCommand) que representa el comando de menú, agrega el BeforeQueryStatus controlador de eventos y proporciona el comando de menú al servicio de comandos de menú.

    Este es el aspecto que debe tener:

    private ChangeMenuText(AsyncPackage package, OleMenuCommandService commandService)
    {
        this.package = package ?? throw new ArgumentNullException(nameof(package));
        commandService = commandService ?? throw new ArgumentNullException(nameof(commandService));
    
        var menuCommandID = new CommandID(CommandSet, CommandId);
        var menuItem = new OleMenuCommand(this.Execute, menuCommandID);
        menuItem.BeforeQueryStatus += new EventHandler(OnBeforeQueryStatus);
        commandService.AddCommand(menuItem);
    }
    
  5. Compile la solución y comience la depuración. Aparece la instancia experimental de Visual Studio.

  6. En el menú Herramientas debería ver un comando denominado Invoke ChangeMenuText.

  7. Haga clic en el comando . Debería ver el cuadro de mensaje que anuncia que se ha llamado a MenuItemCallback . Al descartar el cuadro de mensaje, debería ver que el nombre del comando en el menú Herramientas es ahora Nuevo texto.