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
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).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>
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.
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); }
Skompiluj projekt i rozpocznij debugowanie. Zostanie wyświetlone eksperymentalne wystąpienie programu Visual Studio.
W menu Narzędzia powinno zostać wyświetlone polecenie o nazwie Invoke ChangeMenuText.
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.