Freigeben über


Gewusst wie: Erstellen von Menüs, Untermenüs und Kontextmenüs

Um ein Menü der integrierten Entwicklungsumgebung von Visual Studio (IDE) hinzuzufügen, muss ein VSPackage die Visual Studio SDK Architektur für GROUP-Menüs Befehl verwenden. Aktivieren Befehl-GROUP-Menüs Befehle zwischen Komponenten und Wiederverwendung von der Umgebung und freigegeben werden sollen. Weitere Informationen zum Befehl GROUP-Menüs finden Sie unter Wie VSPackages Benutzeroberflächenelemente Hinzufügen der IDE.

Für VSPackages werden Menüs im Menü Abschnitt einer .vsct-Datei definiert. Eine .vsct-Datei definiert, Menüs und Symbolleisten Befehle und Gruppen. Ein Befehl ist ein, welcher Benutzer klickt, um eine Aufgabe auszuführen. Eine Gruppe ist ein Container für Befehle und Menüs. Ein Menü ist ein Container für Gruppen. Daher um ein einfaches Menü zu erstellen, müssen Sie ein Menü, eine Befehlsgruppe und mindestens einen Befehl erstellen.

Es gibt drei grundlegende Wahrscheinlichkeit, dass ein Menü in Visual Studiowerden kann wie folgt:

  • Ein Menü in der Menüleiste.

  • Ein Untermenü eines anderen Menüs.

  • Ein Kontextmenü angezeigt wird (normalerweise durch einen der rechten Maustaste auf).

Dieses Thema zeigt, wie jede Art von Menü erstellt. In den folgenden exemplarischen Vorgehensweisen wird auch gezeigt, wie Sie dafür vorgehen müssen:

So verschieben Sie ein Menü oder ein Untermenü Erstellen eines Kontextmenüs

  1. Doppelklicken Sie im Projekt auf die .vsct-Datei, um sie im Editor zu öffnen.

    Wenn das Projekt keine .vsct-Datei verfügt, fügen Sie ein hinzu. Wenn Sie ein Paket erstellen, indem Sie die Visual Studio-Paket-Vorlage verwenden, wählen Sie Menübefehl. Hierdurch wird das eine .vsct-Datei.

  2. Im Abschnitt Symbols Suchen Sie das GuidSymbol-Element, das die Gruppen und die Befehle enthält.

  3. Erstellen Sie ein IDSymbol-Element für jedes Menü oder Gruppe, die Sie hinzufügen möchten, wie im folgenden Beispiel gezeigt.

    <GuidSymbol name="guidButtonGroupCmdSet" value="{f69209e9-975a-4543-821d-1f4a2c52d737}">
      <IDSymbol name="MyMenuGroup" value="0x1020" />
      <IDSymbol name="cmdidMyCommand" value="0x0100" />
    </GuidSymbol>
    

    Die name-Attribute der GuidSymbol und IDSymbol-Elemente stellen die GUID: ID-Paare für jedes neue Menü Gruppe oder Command. GUID stellt ein Befehl dar, der für ein VSPackage definiert ist. Sie können mehrere Befehle definieren legt ihn fest. Jedes GUID: ID-Paare müssen eindeutig sein.

  4. Definieren Sie das neue Menü Menus im Abschnitt wie folgt:

    1. Legen Sie die guid und id Felder fest, um die GUID entspricht: ID des neuen Menüs.

    2. Legen Sie das priority-Attribut fest.

      Das priority-Attribut wird vom .vsct verwendet, um die Position des Menüs mit den anderen Objekten in der übergeordneten Gruppe zu bestimmen.

      Menüs, die Werte mit niedrigerer Priorität werden vor Menüs angezeigt, die prioritärere Werte aufweisen. Doppelte Werte für Priorität sind zulässig, aber die relative Position von Menüs, dieselbe Priorität haben, wird durch die Reihenfolge bestimmt, in der VSPackages zur Laufzeit verarbeitet werden und in der Reihenfolge nicht vorbestimmt werden kann. Das Weglassen des priority-Attributs dessen Wert auf 0 fest.

      Legen Sie keine Priorität für ein Kontextmenü fest, da seine Position durch den Code festgelegt wird, der Aufrufe dieses.

    3. Für Menüs und Untermenüs legen Sie das Attribut auf typeMenüsfest, das ein typisches Menü beschreibt. Für Kontextmenüs legen Sie das Attribut auf Kontexttype fest.

      Die Beschreibungen anderer gültiger Menü Typen, z. B. Symbolleisten und Menüs controller finden Sie unter Menu-Element.

    4. In der Definition des Menüs erstellen Sie einen Zeichenfolgen-Abschnitt, der ein ButtonText-Element enthält den Namen des Menüs, wie es in der IDE angezeigt wird, und CommandName-Elements enthalten soll, um den Namen des Befehls, der verwendet wird, um das Befehl im Menü Fenster zuzugreifen.

      Wenn die Schaltflächen Textzeichenfolge dem Namen „&„- Zeichen enthält, kann der Benutzer das Menü zu öffnen, indem er ALT sowie das Zeichen“&drückt, das unmittelbar folgt.“

    5. Fügen Sie ggf. Flags für Befehle hinzu, um die Darstellung und das Verhalten des Menüs zu ändern. Hierzu fügen Sie ein CommandFlag-Element in der Definition des Menüs hinzu. Weitere Informationen finden Sie unter Command Flag-Element.

  5. Legen Sie das übergeordnete Element des Menüs fest. Bei einem Standardmenü oder ein Untermenü führen Sie dies auf eine der folgenden Arten, abhängig vom Entwurf:

    • Im Menu-Element erstellen Sie ein Das übergeordnete Element-Element, und legen Sie dessen guid und id Felder in den GUID fest: ID der Gruppe, die den Host das Menü wird auch der primären übergeordneten Gruppe. Die übergeordnete Gruppe kann eine Gruppe sein, die Sie im Abschnitt Symbols in einer Gruppe von einem anderen Paket oder in einer Gruppe über die IDE erstellt haben. Zum Beispiel das Menü der Menüleiste auf der obersten Ebene der IDE, in der Nähe des Extras Menü hinzuzufügen, legen das übergeordnete Element an das guidSHLMainMenu fest: IDG_VS_MM_TOOLSADDINS.

      Im folgenden Beispiel wird ein Menü angezeigt, das auf der Visual Studio-Menüleiste angezeigt wird.

      <Menu guid="guidTopLevelMenuCmdSet"
      id="TopLevelMenu" priority="0x700" type="Menu">
        <Parent guid="guidSHLMainMenu"
                id="IDG_VS_MM_TOOLSADDINS" />
        <Strings>
          <ButtonText>TestMenu</ButtonText>
          <CommandName>TestMenu</CommandName>
        </Strings>
      </Menu>
      
    • Sie lassen möglicherweise das Parent-Element weg, wenn das Menü positioniert werden soll, indem Sie der Befehls verwendet. Erstellen Sie einen CommandPlacements-Abschnitt vor dem Symbols-Abschnitt, und fügen Sie ein CommandPlacement-Element hinzu, das die GUID verfügt: ID des Menüs, und die Priorität des übergeordneten Elements, wie im folgenden Beispiel gezeigt.

      <CommandPlacements>
        <CommandPlacement guid="guidButtonGroupCmdSet" id="cmdidMyCommand" priority="0x105">
          <Parent guid="guidButtonGroupCmdSet" id="MyMenuGroup" />
        </CommandPlacement>
      </CommandPlacements>
      

      Mehrere Befehls platzierungen erstellen, die das gleiche GUID aufweisen: ID und verfügt über verschiedene Ursachen der übergeordneten Elemente, um ein Menü an mehreren Stellen angezeigt wird. Weitere Informationen finden Sie unter CommandPlacements-Element.

    Erstellen eines Standardmenüs eine Gruppe muss auf der Webseite für Visual Studio-Menüleiste als übergeordnetes Element haben. Für ein Untermenü muss das übergeordnete Element einer Gruppe auf ein anderes Menü handeln (obwohl das Menü Elemente möglicherweise eine Symbolleiste oder ein anderer Typ " Menu "). Damit ein Menü oder ein Untermenü angezeigt werden kann, muss es Hosten eines Gruppe, die mindestens einen aktiven Befehl enthält, oder AlwaysCreate Befehl ermöglicht das flag festlegen.

    Kontextmenüs verfügen über keine übergeordneten Elemente oder platzierungen Befehls. Stattdessen müssen sie im Code aktiviert sein. In der Regel ist ein Kontextmenü auf einen Klicken Sie mit der rechten Maustaste auf eine Steuerfläche aktiviert. Im folgenden Beispiel wird ein Kontextmenü angezeigt.

    <Menu guid="guidButtonGroupCmdSet" id="ShortcutMenu"
          type="Context">
      <Strings>
        <ButtonText>Shortcut Menu</ButtonText>
        <CommandName>ShortcutMenu</CommandName>
      </Strings>
    </Menu>
    
  6. Im Gruppen-Abschnitt erstellen Sie ein Gruppe-Element, um die Befehle, die im Menü angezeigt werden. Der Symbols-Abschnitt muss einen Eintrag enthalten, der auf das gleiche GUID verfügt: ID als das neue Group-Element.

    1. Legen Sie die Priorität der Gruppe fest, sodass sie angezeigt wird, wo Sie es auf das Menü soll.

      Die Begrenzungen jeder Gruppe im Menü angezeigt werden als horizontale Linien.

    2. Legen Sie das übergeordnete Element für die neue Gruppe mit dem GUID fest: ID des Menüs, das Sie erstellt haben. Auf diese Weise wird die Gruppe von Befehlen auf das Menü.

    Die Gruppe ist im folgenden Beispiel wird im Menü der obersten Ebene, das in einem vorherigen Beispiel verwendet wurde.

     <Group guid="guidTopLevelMenuCmdSet" id="MyMenuGroup"
    priority="0x0600">
       <Parent guid="guidTopLevelMenuCmdSet" id="TopLevelMenu"/>
     </Group>
    

    Wenn Sie das Menü wird, das im folgenden Beispiel dargestellt in einer Gruppe im Menü der obersten Ebene angezeigt wird, wird ein Untermenü.

    <Menu guid="guidTopLevelMenuCmdSet" id="SubMenu"
    priority="0x0100" type="Menu">
      <Parent guid="guidTopLevelMenuCmdSet" id="MyMenuGroup"/>
      <Strings>
        <ButtonText>Sub Menu</ButtonText>
        <CommandName>Sub Menu</CommandName>
      </Strings>
    </Menu>
    
  7. Fügen Sie dem Menü Befehle hinzu, indem Sie im Abschnitt Schaltflächen Einträge für Befehle erstellen und das übergeordnete Element für jeden dem GUID fest: ID der Gruppe. Jedes Element muss ein Schaltfläche GUID aufweisen: ID, die einem Eintrag im Symbols-Abschnitt entspricht.

    Verwenden Sie das Attribut priority einzelnen Schaltflächen Zieleintrags, um die Reihenfolge anzugeben, in der die Befehle in der Gruppe angezeigt werden.

    Das folgende Beispiel definiert einen Befehl, der sich im Menü der obersten Ebene angezeigt.

    <Button guid="guidTopLevelMenuCmdSet" id="cmdidTestCommand" priority="0x0100" type="Button">
      <Parent guid="guidTopLevelMenuCmdSet" id="MyMenuGroup" />
      <Icon guid="guidImages" id="bmpPic1" />
      <Strings>
        <CommandName>cmdidTestCommand</CommandName>
        <ButtonText>Test Command</ButtonText>
      </Strings>
    </Button>
    

    Weitere Informationen über Schaltflächen und Menüelementen finden Sie unter Button-Element.

    Informationen dazu, wie Menübefehle im Code finden Sie unter Gewusst wie: Erstellen und behandeln Sie Befehle in VSPackages (C#) oder die exemplarischen Vorgehensweisen implementiert, die weiter oben in diesem Thema erwähnt werden.

So aktivieren Sie ein Kontextmenü

  1. Ruft die GUID: ID des Kontextmenüs. Standardmäßig erstellt das Paket eine Vorlage GuidList-Klasse in einer PkgCmdID.cs-Datei, um die GUID des Befehls. festgelegten Die Vorlage erstellt außerdem eine PkgCmdIdList-Klasse in einer PkgCmdId.cs-Datei, um die ganzzahligen ID-Werte Speichern von Befehlen in der Vorlage deklariert werden. Kontextmenüs und alle zusätzlichen Befehle müssen deklariert werden, nachdem die Vorlage abgeschlossen ist. Im folgenden Beispiel wird diese Deklarationen an.

    static class PkgCmdIDList
    {
    
        public const uint cmdidColorChange =    0x101;
        public const int ColorMenu = 0x1000;
    
        public const int cmdidRed = 0x102;
        public const int cmdidYellow = 0x103;
        public const int cmdidBlue = 0x104;
    
    };
    

    Dieser Schritt kann ausgelassen werden, wenn der GUID-Wert und ID-Werte direkt verwendet werden. Es empfiehlt sich jedoch, dass Sie hier, um die Werte für die Lesbarkeit festgelegt.

  2. Anfügen an einen Ereignishandler. Normalerweise Kontextmenü auf den befestigung mit der rechten Maustaste auf eine Steuerfläche, wie im folgenden Beispiel gezeigt.

    private void MyToolWindow_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
    {
        OleMenuCommandService mcs = this._parent.mcs;
        if (null != mcs)
        {
            CommandID menuID = new CommandID(
                GuidList.guidTWShortcutMenuCmdSet,
                PkgCmdIDList.ColorMenu);
            Point p = this.PointToScreen(e.GetPosition(this));
            mcs.ShowContextMenu(menuID, (int)p.X, (int)p.Y);
        }
    }
    

    Die PointToScreen-Methode konvertiert die Position, auf die relativ zum Steuerelement ist, zu einer Bildschirmposition. Die ShowContextMenu-Methode zeigt das Kontextmenü an.

    Die Datei, die den Ereignishandler enthält, muss dem System.ComponentModel.Design-Namespace, um die OleMenuCommandService-Klasse zuzugreifen und den Microsoft.VisualStudio.Shell-Namespace einschließen, um die IMenuCommandService-Schnittstelle zuzugreifen.

    using Microsoft.VisualStudio.Shell;
    using System.ComponentModel.Design;
    

Siehe auch

Aufgaben

Gewusst wie: Erstellen und behandeln Sie Befehle in VSPackages (C#)

Konzepte

VSCT-XML-Schemaverweis

Weitere Ressourcen

Allgemeine Aufgaben mit Befehlen, Menüs und Symbolleisten