Exemplarische Vorgehensweise: Eine Liste zuletzt verwendeter zu einem Untermenü hinzu
Verlauf dieser exemplarischen Vorgehensweise baut auf den Exemplarische Vorgehensweise: Ein Untermenü auf ein Menü hinzuin Demonstrationen und zeigt, wie eine dynamische Liste einem Untermenü hinzu. Die Formen der dynamischen Liste die Grundlage für das Erstellen einer Liste zuletzt verwendeter MRU ().
Starten einer dynamischen Liste Menü mit einem Platzhalter in einem Menü. Jedes Mal, wenn ein Menü angezeigt wird, fordert die Visual Studio integrierte Entwicklungsumgebung (IDE) VSPackage um alle Befehle, die dem Platzhalter angezeigt werden sollen. Eine dynamische Liste kann an einer beliebigen Stelle in einem Menü erfolgen. Allerdings werden dynamische Listen in der Regel auch auf Untermenüs oder Unten von Menüs gespeichert und angezeigt. Mit dieser Entwurfsmuster verwenden, können Sie die dynamische Liste von Befehlen zu erweitern und verkleinern, ohne die Position anderer Befehle im Menü zu beeinflussen. In dieser exemplarischen Vorgehensweise wird die dynamische MRU-Liste am unteren Rand eines vorhandenen Untermenü angezeigt, getrennt vom Rest des Untermenüs durch eine Linie.
Technisch kann eine dynamische Liste auch auf einer Symbolleiste angewendet werden. Allerdings entmutigen wir eine Symbolleiste, da diese unverändert bleiben soll, es sei denn, der Benutzer bestimmte Schritte unternimmt, um sie zu ändern.
In dieser exemplarischen Vorgehensweise wird eine MRU-Liste von vier Elementen, deren Reihenfolge jedes Mal ändern, dass eine davon ausgewählt wird (das ausgewählte Element wechselt zum Anfang der Liste.)
Weitere Informationen über Menüs und .vsct-Dateien finden Sie unter Befehle, Menüs und Symbolleisten.
Vorbereitungsmaßnahmen
Zum Abschließen dieser exemplarischen Vorgehensweise müssen Sie Visual Studio 2010 SDKinstallieren.
Hinweis
Weitere Informationen über das Visual Studio-SDK finden Sie unter Erweitern von Visual Studio Overview.Um herauszufinden finden Sie unter wie das Visual Studio-SDK, auf Visual Studio Extensibility Developer Center der MSDN-Website herunterlädt.
Speicherorte für die Visual Studio-Paket-Projektvorlage
Die Visual Studio-Paket Projektvorlage ist in drei Positionen im Dialogfeld Neues Projekt verfügbar:
Die Visual Basic-Erweiterbarkeit. Die Standardsprache des Projekts ist Visual Basic.
Die C#-Erweiterbarkeit. Die Standardsprache ist C# des Projekts.
Die Andere Projekttypen/Erweiterungen. Die Standardsprache des Projekts ist C++.
VSPackage erstellen
So erstellen TopLevelMenu VSPackage
- Halten Sie die Prozeduren in Exemplarische Vorgehensweise: Ein Untermenü auf ein Menü hinzu ein, um das Untermenü erstellen, das in den folgenden Verfahren geändert wird.
Die Prozeduren in dieser exemplarischen Vorgehensweise wird davon ausgegangen, dass der Name TopLevelMenuVSPackages, der der Name ist, der in Exemplarische Vorgehensweise: Ein Menü in Visual Studio-Menüleiste hinzufügen (C#)verwendet wird.
Erstellen eines dynamischen Element-Listen-Befehl
So erstellen Sie einen dynamischen Befehl Elementlisten
Öffnen Sie TopLevelMenu.vsct.
Klicken Sie im Abschnitt SymbolsGuidSymbol Knoten, der guidTopLevelMenuCmdSet Fügen Sie dem Namen das Symbol für die MRUListGroup Gruppe und den cmdidMRUList Befehl wie folgt hinzu.
Im Groups-Abschnitt fügen Sie die deklarierte Gruppe nach Einträgen der vorhandenen Gruppe hinzu.
Im Buttons-Abschnitt fügen Sie einen Knoten hinzu, um den neu deklarierten Befehl Einträgen nach den vorhandenen Schaltflächen darzustellen.
<Button guid="guidTopLevelMenuCmdSet" id="cmdidMRUList" type="Button" priority="0x0100"> <Parent guid="guidTopLevelMenuCmdSet" id="MRUListGroup" /> <CommandFlag>DynamicItemStart</CommandFlag> <Strings> <CommandName>cmdidMRUList</CommandName> <ButtonText>MRU Placeholder</ButtonText> </Strings> </Button>
Das DynamicItemStart-Flag kann der Befehl, dynamisch generiert wird.
Zeigen Sie im MenüErstellen Projektmappe erstellen.
Auf diese .vsct-Datei die Neuerstellung mit den Änderungen. Beheben Sie alle Fehler, die möglicherweise während der Builderstellung verwendet werden.
Drücken Sie F5, um die Anzeige des neuen Befehls zu testen.
Zeigen Sie im Menü TestMenu Klicken Sie auf das neue Untermenü, Untermenü, um den neuen Befehl anzuzeigen, MRU-Platzhalter. Nachdem eine dynamische MRU-Liste von Befehlen in der folgenden Prozedur implementiert ist, wird dieser Befehl Bezeichnung dieser Liste von jedes Mal ersetzt, dass das Untermenü geöffnet ist.
Hinweis
Sie müssen experimentelle Visual Studio schließen, bevor Sie mit dem nächsten Abschnitt fortfahren.
Die MRU-Liste auffüllen
Um die MRU-Liste mithilfe von verwaltetem Code einfügen
Öffnen Sie PkgCmdID.cs oder PkgCmdID.vb im Code-Editor.
Fügen Sie die folgende Befehls-ID nach der vorhandenen Befehls-IDs in der PkgCmdIDList-Klassendefinition hinzu.
public const uint cmdidMRUList = 0x200;
Öffnen Sie TopLevelMenuPackage.cs oder TopLevelMenuPackage.vb im Code-Editor.
Fügen Sie am Anfang der Datei am Ende der Liste der Verwendung von Anweisungen die folgende Anweisung hinzu.
using System.Collections;
Suchen Sie die Initialize-Methode. Möglicherweise müssen Sie den verborgenen Bereich finden, der Paket-Member „Bezeichnung“ und erweitern Sie ihn. Die Initialize-Methode ist in diesem verborgenen Bereich.
Zur Initialize-Methode fügen Sie die folgende Zeile direkt nach dem letzten Aufruf der AddCommand-Methode hinzu. InitMRUMenu wird nach Schritt 8 nicht definiert.
this.InitMRUMenu(mcs);
Am Ende der MyTopLevelMenuPackage-Klasse, fügen Sie den folgenden Code direkt nach der SubItemCallback-Methode hinzu. Dieser Code initialisiert die Liste von Zeichenfolgen, die die auf der MRU-Liste darstellen, Elemente angezeigt werden sollen.
private int numMRUItems = 4; private int baseMRUID = (int)PkgCmdIDList.cmdidMRUList; private ArrayList mruList; private void InitializeMRUList() { if (null == this.mruList) { this.mruList = new ArrayList(); if (null != this.mruList) { for (int i = 0; i < this.numMRUItems; i++) { this.mruList.Add(string.Format(CultureInfo.CurrentCulture, "Item {0}", i + 1)); } } } }
Nach der InitializeMRUList-Methode InitMRUMenu Fügen Sie die folgende Methode hinzu. Dieses initialisiert die MRU-Listen-Menübefehle.
private void InitMRUMenu(OleMenuCommandService mcs) { InitializeMRUList(); for (int i = 0; i < this.numMRUItems; i++) { var cmdID = new CommandID( GuidList.guidTopLevelMenuCmdSet, this.baseMRUID + i); var mc = new OleMenuCommand( new EventHandler(OnMRUExec), cmdID); mc.BeforeQueryStatus += new EventHandler(OnMRUQueryStatus); mcs.AddCommand(mc); } }
In verwaltetem Code müssen Sie ein Menübefehl Objekt für jedes beliebige Element in der MRU-Liste erstellen. Die IDE ruft die OnMRUQueryStatus-Methode für jedes Element in der MRU-Liste an, bis keine weiteren Knoten vorhanden sind. In verwaltetem Code die einzige Möglichkeit, damit die IDE, dass keine weiteren Knoten vorhanden sind, besteht darin, alle möglichen Elemente zuerst zu erstellenden weiß. Wenn Sie möchten, können Sie zusätzliche Elemente markieren zuerst als nicht sichtbar, indem Sie mc.Visible = false; verwenden, nachdem der Menübefehl erstellt wurde. Diese Elemente können später sichtbar gemacht werden, indem mc.Visible = true; in der OnMRUQueryStatus-Methode veranschaulicht.
Nach der InitMRUMenu-Methode OnMRUQueryStatus Fügen Sie die folgende Methode hinzu. Dies ist der Handler, der den Text für jedes MRU-Element festlegt.
private void OnMRUQueryStatus(object sender, EventArgs e) { OleMenuCommand menuCommand = sender as OleMenuCommand; if (null != menuCommand) { int MRUItemIndex = menuCommand.CommandID.ID - this.baseMRUID; if (MRUItemIndex >= 0 && MRUItemIndex < this.mruList.Count) { menuCommand.Text = this.mruList[MRUItemIndex] as string; } } }
Nach der OnMRUQueryStatus-Methode OnMRUExec Fügen Sie die folgende Methode hinzu. Dies ist der Handler zum Auswählen eines MRU-Elements. Diese Methode verschiebt das ausgewählte Element auf den Anfang der Liste, und zeigt dann das ausgewählte Element in einem Meldungsfeld angezeigt.
private void OnMRUExec(object sender, EventArgs e) { var menuCommand = sender as OleMenuCommand; if (null != menuCommand) { int MRUItemIndex = menuCommand.CommandID.ID - this.baseMRUID; if (MRUItemIndex >= 0 && MRUItemIndex < this.mruList.Count) { string selection = this.mruList[MRUItemIndex] as string; for (int i = MRUItemIndex; i > 0; i--) { this.mruList[i] = this.mruList[i - 1]; } this.mruList[0] = selection; System.Windows.Forms.MessageBox.Show( string.Format(CultureInfo.CurrentCulture, "Selected {0}", selection)); } } }
Zum Erstellen der Projektmappe klicken Sie im Menü Erstellen auf Projektmappe erstellen. Beheben Sie alle Fehler, die möglicherweise auftreten.
Die MRU-Liste testen
So testen Sie die Liste MRU-Menü
Drücken Sie F5, um die Anzeige des neuen Befehls zu testen.
Zeigen Sie im Menü TestMenuBefehl testen. Auf diese Weise wird ein Meldungsfeld angezeigt, das angibt, dass der Befehl aktiviert wurde.
Hinweis
Dieser Schritt ist erforderlich, um zu erzwingen, dass die VSPackages geladen und MRU-Liste ordnungsgemäß angezeigt wird.Wenn Sie diesen Schritt überspringen, wird die MRU-Liste nicht angezeigt.
Zeigen Sie im Menü TestmenüUntermenü. Eine Liste von vier Elementen wird am Ende des Untermenüs in einem Trennzeichen angezeigt. Wenn Sie auf Element 3klicken, sollte ein Meldungsfeld angezeigt werden und den Text anzeigen, Item3 wählen Sie „.“ (Wenn die Liste von vier Elementen nicht angezeigt wird, stellen Sie sicher, dass Sie die Anweisungen im vorherigen Schritt befolgt haben).
Öffnen Sie im Untermenü erneut. Beachten Sie, dass Element 3 jetzt am Anfang der Liste befindet und die anderen Elemente eine Position gedrückt wurden. Klicken Sie auf Element 3 erneut, und beachten Sie, dass die Anzeige des Meldungsfelds Item3 „noch“ ausgewählt haben, das angibt, dass der Text ordnungsgemäß sich an die neue Position zusammen mit der Befehl Bezeichnung bewegt hat.
Siehe auch
Aufgaben
Gewusst wie: Fügen Sie dynamisch Menüelemente hinzu
Weitere Ressourcen
Exemplarische Vorgehensweisen für Befehle, Menüs und Symbolleisten