Ajouter une liste la plus récente utilisée à un sous-menu
Cette procédure pas à pas s’appuie sur les démonstrations dans Ajouter un sous-menu à un menu et montre comment ajouter une liste dynamique à un sous-menu. La liste dynamique constitue la base de la création d’une liste MRU (Most Recently Used).
Une liste de menus dynamiques commence par un espace réservé dans un menu. Chaque fois que le menu s’affiche, l’environnement de développement intégré Visual Studio (IDE) demande à VSPackage toutes les commandes qui doivent être affichées à l’espace réservé. Une liste dynamique peut se produire n’importe où dans un menu. Toutefois, les listes dynamiques sont généralement stockées et affichées par eux-mêmes sur les sous-menus ou au bas des menus. En utilisant ces modèles de conception, vous activez la liste dynamique des commandes à développer et à contracter sans affecter la position d’autres commandes dans le menu. Dans cette procédure pas à pas, la liste mrU dynamique s’affiche en bas d’un sous-menu existant, séparé du reste du sous-menu par une ligne.
Techniquement, une liste dynamique peut également être appliquée à une barre d’outils. Toutefois, nous déconseillons cette utilisation, car une barre d’outils doit rester inchangée, sauf si l’utilisateur prend des mesures spécifiques pour le modifier.
Cette procédure pas à pas crée une liste de quatre éléments qui modifient leur ordre chaque fois que l’un d’eux est sélectionné (l’élément sélectionné se déplace en haut de la liste).
Pour plus d’informations sur les menus et les fichiers .vsct , consultez Commandes, menus et barres d’outils.
Prérequis
Pour suivre cette procédure pas à pas, vous devez installer le Kit de développement logiciel (SDK) Visual Studio. Pour plus d'informations, consultez SDK Visual Studio.
Créer une extension
Suivez les procédures de l’ajout d’un sous-menu à un menu pour créer le sous-menu modifié dans les procédures suivantes.
Les procédures décrites dans cette procédure pas à pas supposent que le nom du VSPackage est
TestCommand
, qui est le nom utilisé dans Ajouter un menu à la barre de menus de Visual Studio.
Créer une commande de liste d’éléments dynamiques
Ouvrez TestCommandPackage.vsct.
Dans la
Symbols
section, dans leGuidSymbol
nœud nommé guidTestCommandPackageCmdSet, ajoutez le symbole du groupe et de laMRUListGroup
cmdidMRUList
commande, comme suit.<IDSymbol name="MRUListGroup" value="0x1200"/> <IDSymbol name="cmdidMRUList" value="0x0200"/>
Dans la
Groups
section, ajoutez le groupe déclaré après les entrées de groupe existantes.<Group guid="guidTestCommandPackageCmdSet" id="MRUListGroup" priority="0x0100"> <Parent guid="guidTestCommandPackageCmdSet" id="SubMenu"/> </Group>
Dans la
Buttons
section, ajoutez un nœud pour représenter la commande nouvellement déclarée, après les entrées de bouton existantes.<Button guid="guidTestCommandPackageCmdSet" id="cmdidMRUList" type="Button" priority="0x0100"> <Parent guid="guidTestCommandPackageCmdSet" id="MRUListGroup" /> <CommandFlag>DynamicItemStart</CommandFlag> <Strings> <CommandName>cmdidMRUList</CommandName> <ButtonText>MRU Placeholder</ButtonText> </Strings> </Button>
L’indicateur
DynamicItemStart
permet à la commande d’être générée dynamiquement.Générez le projet et démarrez le débogage pour tester l’affichage de la nouvelle commande.
Dans le menu TestMenu , cliquez sur le nouveau sous-menu, sous-menu, pour afficher la nouvelle commande, espace réservé MRU. Une fois qu’une liste dynamique de commandes est implémentée dans la procédure suivante, cette étiquette de commande est remplacée par cette liste chaque fois que le sous-menu est ouvert.
Remplissage de la liste mrU
Dans TestCommandPackageGuids.cs, ajoutez les lignes suivantes après les ID de commande existants dans la définition de
TestCommandPackageGuids
classe.public const string guidTestCommandPackageCmdSet = "00000000-0000-0000-0000-00000000"; // get the GUID from the .vsct file public const uint cmdidMRUList = 0x200;
Dans TestCommand.cs , ajoutez l’instruction using suivante.
using System.Collections;
Ajoutez le code suivant dans le constructeur TestCommand après le dernier appel AddCommand. Le
InitMRUMenu
sera défini ultérieurementthis.InitMRUMenu(commandService);
Ajoutez le code suivant dans la classe TestCommand. Ce code initialise la liste des chaînes qui représentent les éléments à afficher dans la liste MRU.
private int numMRUItems = 4; private int baseMRUID = (int)TestCommandPackageGuids.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)); } } } }
Après la
InitializeMRUList
méthode, ajoutez laInitMRUMenu
méthode. Cette opération initialise les commandes du menu liste des mrU.private void InitMRUMenu(OleMenuCommandService mcs) { InitializeMRUList(); for (int i = 0; i < this.numMRUItems; i++) { var cmdID = new CommandID( new Guid(TestCommandPackageGuids.guidTestCommandPackageCmdSet), this.baseMRUID + i); var mc = new OleMenuCommand( new EventHandler(OnMRUExec), cmdID); mc.BeforeQueryStatus += new EventHandler(OnMRUQueryStatus); mcs.AddCommand(mc); } }
Vous devez créer un objet de commande de menu pour chaque élément possible dans la liste mrU. L’IDE appelle la
OnMRUQueryStatus
méthode pour chaque élément de la liste MRU jusqu’à ce qu’il n’y ait plus d’éléments. Dans le code managé, la seule façon pour l’IDE de savoir qu’il n’y a plus d’éléments consiste à créer tous les éléments possibles en premier. Si vous le souhaitez, vous pouvez marquer des éléments supplémentaires comme non visibles au début à l’aidemc.Visible = false;
de la commande de menu créée. Ces éléments peuvent ensuite être rendus visibles ultérieurement à l’aidemc.Visible = true;
de laOnMRUQueryStatus
méthode.Après la
InitMRUMenu
méthode, ajoutez la méthode suivanteOnMRUQueryStatus
. Il s’agit du gestionnaire qui définit le texte de chaque élément MRU.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; } } }
Après la
OnMRUQueryStatus
méthode, ajoutez la méthode suivanteOnMRUExec
. Il s’agit du gestionnaire permettant de sélectionner un élément MRU. Cette méthode déplace l’élément sélectionné en haut de la liste, puis affiche l’élément sélectionné dans une boîte de message.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)); } } }
Test de la liste mrU
Générez le projet et commencez le débogage.
Dans le menu TestMenu , cliquez sur Appeler TestCommand. Cette opération affiche une boîte de message qui indique que la commande a été sélectionnée.
Remarque
Cette étape est nécessaire pour forcer le vsPackage à charger et à afficher correctement la liste mrU. Si vous ignorez cette étape, la liste mrU n’est pas affichée.
Dans le menu Menu Test, cliquez sur Sous-menu. Une liste de quatre éléments s’affiche à la fin du sous-menu, sous un séparateur. Lorsque vous cliquez sur l’élément 3, une zone de message doit apparaître et afficher le texte, élément sélectionné 3. (Si la liste de quatre éléments n’est pas affichée, vérifiez que vous avez suivi les instructions de l’étape précédente.)
Ouvrez à nouveau le sous-menu. Notez que l’élément 3 se trouve maintenant en haut de la liste et que les autres éléments ont été poussés vers le bas d’une position. Cliquez à nouveau sur l’élément 3 et notez que la zone de message affiche toujours l’élément sélectionné 3, ce qui indique que le texte a correctement déplacé vers la nouvelle position avec l’étiquette de commande.