Modificare il testo di un comando di menu

I passaggi seguenti illustrano come modificare l'etichetta di testo di un comando di menu usando il IMenuCommandService servizio.

Modifica di un'etichetta di comando di menu con IMenuCommandService

  1. Creare un progetto VSIX denominato MenuText con un comando di menu denominato ChangeMenuText. Per altre informazioni, vedere Creare un'estensione con un comando di menu.

  2. Nel file vsct aggiungere il TextChanges flag al comando di menu, come illustrato nell'esempio seguente.

    <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. Nel file ChangeMenuText.cs creare un gestore eventi che verrà chiamato prima che venga visualizzato il comando di menu.

    private void OnBeforeQueryStatus(object sender, EventArgs e)
    {
        var myCommand = sender as OleMenuCommand;
        if (null != myCommand)
        {
            myCommand.Text = "New Text";
        }
    }
    

    È anche possibile aggiornare lo stato del comando di menu in questo metodo modificando le Visibleproprietà , Checkede Enabled nell'oggetto OleMenuCommand .

  4. Nel costruttore ChangeMenuText sostituire il codice di inizializzazione e posizionamento del comando originale con codice che crea un oggetto (anziché un OleMenuCommandMenuCommand) che rappresenta il comando di menu, aggiunge il BeforeQueryStatus gestore eventi e assegna il comando di menu al servizio comandi di menu.

    Di seguito è riportato l'aspetto seguente:

    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. Compilare il progetto e avviare il debug. Viene visualizzata l'istanza sperimentale di Visual Studio.

  6. Nel menu Strumenti dovrebbe essere visualizzato un comando denominato Invoke ChangeMenuText.

  7. Fare clic sul comando . Verrà visualizzata la finestra di messaggio che annuncia che MenuItemCallback è stato chiamato. Quando si ignora la finestra di messaggio, si noterà che il nome del comando nel menu Strumenti è ora Nuovo testo.