Ändern des Texts eines Menübefehls

Die folgenden Schritte zeigen, wie Sie die Beschriftung eines Menübefehls mithilfe des IMenuCommandService Diensts ändern.

Ändern einer Menübefehlsbezeichnung mit dem IMenuCommandService

  1. Erstellen Sie ein VSIX-Projekt mit MenuText dem Namen "ChangeMenuText" mit dem Menübefehl "ChangeMenuText". Weitere Informationen finden Sie unter Erstellen einer Erweiterung mit einem Menübefehl.

  2. Fügen Sie in der VSCT-Datei das TextChanges Flag zu Ihrem Menübefehl hinzu, wie im folgenden Beispiel gezeigt.

    <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. Erstellen Sie in der Datei ChangeMenuText.cs einen Ereignishandler, der aufgerufen wird, bevor der Menübefehl angezeigt wird.

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

    Sie können auch den Status des Menübefehls in dieser Methode aktualisieren, indem Sie die VisibleEigenschaften Checkedund Enabled Eigenschaften des OleMenuCommand Objekts ändern.

  4. Ersetzen Sie im ChangeMenuText-Konstruktor den ursprünglichen Befehlsinitialisierungs- und Platzierungscode durch Code, der einen (anstelle eines OleMenuCommandMenuCommand) erstellt, der den Menübefehl darstellt, den BeforeQueryStatus Ereignishandler hinzufügt und dem Menübefehlsdienst den Menübefehl bereitstellt.

    So sollte es aussehen:

    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. Erstellen Sie das Projekt, und starten Sie das Debugging. Die experimentelle Instanz von Visual Studio wird angezeigt.

  6. Im Menü "Extras" sollte ein Befehl mit dem Namen "Invoke ChangeMenuText" angezeigt werden.

  7. Klicken Sie auf den Befehl. Es sollte das Meldungsfeld angezeigt werden, in dem angekündigt wird, dass MenuItemCallback aufgerufen wurde. Wenn Sie das Meldungsfeld schließen, sollten Sie sehen, dass der Name des Befehls im Menü "Extras" jetzt "Neuer Text" lautet.