Freigeben über


Gewusst wie: Ändern Sie den Text eines Menübefehls

Die folgenden Schritte zeigen, wie die Beschriftung eines Menübefehls geändert werden, indem verwaltetem Code sowie den IMenuCommandService Dienst verwenden.

Verfahren

So erstellen Sie eine Menübefehls mit der Bezeichnung Finish ändern IMenuCommandService

  1. Erstellen Sie z. B. MenuTextmit einem VSPackage Wenn VSPackage-Assistenten wird, akzeptieren die Option Menübefehl und alle Standardeinstellungen.

  2. In der .vstc-Datei fügen Sie das TextChanges-Flag dem Menübefehl, wie im folgenden Beispiel gezeigt.

    <Button guid="guidMenuTextCmdSet" id="cmdidMyCommand" priority="0x0100" type="Button">
      <Parent guid="guidMenuTextCmdSet" id="MyMenuGroup" />
      <Icon guid="guidImages" id="bmpPic1" />
      <CommandFlag>TextChanges</CommandFlag>
      <Strings>
        <CommandName>cmdidMyCommand</CommandName>
        <ButtonText>My Command name</ButtonText>
      </Strings>
    </Button>
    
  3. In einem VSPackage erstellen Sie einen Ereignishandler erstellen, der aufgerufen werden soll, bevor der Menübefehl angezeigt wird.

    Private Sub OnBeforeQueryStatus(ByVal sender As Object, ByVal e As EventArgs)
        Dim myCommand As OleMenuCommand = TryCast(sender, OleMenuCommand)
        If myCommand IsNot Nothing Then
            myCommand.Text = "New Text" 
        End If 
    End Sub
    
    private void OnBeforeQueryStatus(object sender, EventArgs e)
    {
        var myCommand = sender as OleMenuCommand;
        if (null != myCommand)
        {
            myCommand.Text = "New Text";
        }
    }
    

    Sie können den Status des Menübefehls in dieser Methode auch aktualisieren, indem Sie Visible, Checkedund Enabled-Eigenschaften für das OleMenuCommand-Objekt ändern.

  4. Fügen Sie Code hinzu, mit dem die folgenden Aktionen ausführt, wenn ein VSPackage initialisiert wird.

    1. Abfragen von dem Menübefehlsdienst.

    2. Erstellen Sie ein OleMenuCommand-Objekt, das den Menübefehl darstellt.

    3. Fügen Sie den BeforeQueryStatus-Ereignishandler hinzu.

    4. Weisen Sie dem Menübefehlsdienst den Menübefehl. Sie müssen MenuCommandOleMenuCommandzu ändern, wie im folgenden Beispiel gezeigt.

    Dim menuCommandID As CommandID = New CommandID(GuidList.guidMenuTextCmdSet, CInt(PkgCmdIDList.cmdidMyTextCommand))
    Dim menuItem As OleMenuCommand = New OleMenuCommand(New EventHandler(AddressOf MenuItemCallback), menuCommandID)
    AddHandler menuItem.BeforeQueryStatus, AddressOf OnBeforeQueryStatus
    mcs.AddCommand(menuItem)
    
    // Create the command for the menu item.
    CommandID menuCommandID = new CommandID(GuidList.guidMenuTextCmdSet, (int)PkgCmdIDList.cmdidMyCommand);
    OleMenuCommand menuItem = new OleMenuCommand(MenuItemCallback, menuCommandID );
    menuItem.BeforeQueryStatus +=
        new EventHandler(OnBeforeQueryStatus);
    mcs.AddCommand(menuItem);
    

    Wenn Sie die Vorlage Paket verwenden, um einen Menübefehl erstellen, wird er automatisch den erforderlichen Code hinzu. Allerdings deklariert es den Menübefehl, da ein MenuCommand-Objekt und nicht den BeforeQueryStatus-Handler hinzufügen. Deshalb müssen Sie die Deklaration des Menübefehls geändert werden, um OleMenuCommand zu verwenden und den Handler auf der nächsten Zeile hinzuzufügen.

    Die Paketdatei muss System.ComponentModel.Design und die Microsoft.VisualStudio.Shell-Namespaces einschließen, um die IMenuCommandService-Schnittstelle und das OleMenuCommand-Objekt zuzugreifen.

Siehe auch

Weitere Ressourcen

Allgemeine Aufgaben mit Befehlen, Menüs und Symbolleisten