Udostępnij za pośrednictwem


Zmienianie tekstu polecenia menu

W poniższych krokach pokazano, jak zmienić etykietę tekstową polecenia menu przy użyciu IMenuCommandService usługi.

Zmienianie etykiety polecenia menu za pomocą polecenia IMenuCommandService

  1. Utwórz projekt VSIX o nazwie MenuText za pomocą polecenia menu o nazwie ChangeMenuText. Aby uzyskać więcej informacji, zobacz Create an extension with a menu command (Tworzenie rozszerzenia za pomocą polecenia menu).

  2. W pliku vsct dodaj flagę TextChanges do polecenia menu, jak pokazano w poniższym przykładzie.

    <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. W pliku ChangeMenuText.cs utwórz procedurę obsługi zdarzeń, która zostanie wywołana przed wyświetleniem polecenia menu.

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

    Możesz również zaktualizować stan polecenia menu w tej metodzie, zmieniając Visiblewłaściwości , Checkedi Enabled na OleMenuCommand obiekcie.

  4. W konstruktorze ChangeMenuText zastąp oryginalny kod inicjowania polecenia i umieszczania kodem, który tworzy OleMenuCommand (a nie MenuCommand) reprezentujący polecenie menu, dodaje BeforeQueryStatus program obsługi zdarzeń i przekazuje polecenie menu do usługi poleceń menu.

    Oto jak to powinno wyglądać:

    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. Skompiluj projekt i rozpocznij debugowanie. Zostanie wyświetlone eksperymentalne wystąpienie programu Visual Studio.

  6. W menu Narzędzia powinno zostać wyświetlone polecenie o nazwie Invoke ChangeMenuText.

  7. Kliknij polecenie . Powinno zostać wyświetlone okno komunikatu z informacją o wywołaniu menuItemCallback . Po odrzuceniu pola komunikatu powinna zostać wyświetlona nazwa polecenia w menu Narzędzia to teraz Nowy tekst.