Procédure pas - à - pas : ajouter une liste derniers fichiers utilisés à un sous-menu
Cette procédure pas - à - pas repose sur des démonstrations dans Procédure pas - à - pas : ajouter un sous-menu à un menu, et montre comment ajouter une liste dynamique à un sous-menu. les formulaires de liste dynamiques la base pour créer une liste (MRU) derniers fichiers utilisés.
Démarre dynamiques d'une liste de menu avec un espace réservé dans un menu. Chaque fois que le menu est affiché, l'environnement de développement intégré (IDE) de (IDE) Visual Studio demande le VSPackage toutes les commandes qui doivent être affichées à l'espace réservé. Une liste dynamique peut se produire à tout emplacement du menu. Toutefois, les listes dynamiques sont généralement stockées et affichées seuls sur des sous-menus ou aux bas des menus. Grâce à ces modèles de design, vous permettez à la liste de commandes dynamique pour développer et se la contraction sans affecter la position d'autres commandes et du menu. Dans cette procédure pas - à - pas, la liste des fichiers récents dynamique s'affiche en bas d ' un sous-menu existant, distinct du reste du sous-menu par une ligne.
techniquement, une liste dynamique peut également être appliquée à une barre d'outils. Toutefois, nous décourageons cette utilisation car une barre d'outils doit rester inchangé à moins que l'utilisateur prenne des mesures spécifiques pour la modifier.
Cette procédure pas - à - pas crée une liste des fichiers récents de quatre éléments qui modifient leur commande chaque fois que l'un d'eux est sélectionné (l'élément sélectionné se déplace au début de la liste).
Pour plus d'informations sur les menus et les fichiers de .vsct, consultez commandes, menus, et barres d'outils.
Composants requis
Pour exécuter cette procédure, vous devez installer Kit de développement logiciel Visual Studio 2010.
Notes
Pour plus d'informations sur le kit de développement Visual Studio, consultez Étendre la présentation de Visual Studio.Pour savoir comment télécharger le kit de développement Visual Studio, consultez Visual Studio Extensibility Developer Center sur le site Web MSDN.
Emplacements du modèle de projet de package Visual Studio
Le modèle de projet de package Visual Studio est disponible dans trois emplacements dans la boîte de dialogue de Nouveau projet :
sous Extensibilité Visual Basic. Le langage par défaut du projet est en Visual Basic.
sous Extensibilité c#. Le langage par défaut du projet est c#.
sous L'autre projet types l'extensibilité. Le langage par défaut du projet est en C++.
créer un VSPackage
pour créer le TopLevelMenu VSPackage
- Suivez les procédures décrites dans Procédure pas - à - pas : ajouter un sous-menu à un menu pour créer le sous-menu qui est modifié dans les procédures suivantes.
Les procédures pas - à - pas supposent que le nom du VSPackage est TopLevelMenu, qui est le nom utilisé dans Procédure pas - à - pas : Ajout d'un menu dans la barre de menus de Visual Studio (c#).
Créer une commande dynamique de la liste d'éléments
Pour créer une commande dynamique de la liste d'éléments
ouvrez TopLevelMenu.vsct.
Dans la section d' Symbols , dans le nœud d' GuidSymbol nommé guidTopLevelMenuCmdSet, ajoutez le symbole pour le groupe d' MRUListGroup et l'ordre des cmdidMRUList , comme suit.
dans la section d' Groups , ajoutez le groupe déclaré après les entrées de groupe existant.
Dans la section d' Buttons , ajoutez un nœud pour représenter la commande récemment déclaré, après les entrées existantes de bouton.
<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>
la balise d' DynamicItemStart active la commande d'être généré dynamiquement.
Dans le menu de Générer ,cliquez sur Générer la solution.
Faisant cela régénère le fichier de .vsct avec les modifications. Corrigez toutes les erreurs qui peuvent se produire pendant la génération.
Appuyez sur F5 pour tester l'affichage de la nouvelle.
Dans le menu de TestMenu , cliquez sur le nouveau sous-menu, Sous-menu, pour afficher la nouvelle commande, L'espace réservé de MRU. Une fois qu'une liste des fichiers récents dynamique de commandes est implémentée dans la procédure suivante, ce nom de commande sera remplacé par cette liste chaque fois que le sous-menu est ouvert.
Notes
Vous devez fermer Visual Studio expérimental avant de passer à la section suivante.
Remplir la liste des fichiers récents
Pour remplir une liste des fichiers récents à l'aide de code managé
ouvrez PkgCmdID.cs ou PkgCmdID.vb dans l'éditeur de code.
Ajoutez l'ID de commande suivante après les identificateurs existants de commande dans la définition de classe d' PkgCmdIDList .
public const uint cmdidMRUList = 0x200;
ouvrez TopLevelMenuPackage.cs ou TopLevelMenuPackage.vb dans l'éditeur de code.
En haut du fichier, à la fin de la liste d'instructions, ajoutez l'instruction suivante.
using System.Collections;
recherchez la méthode d' Initialize . Vous pouvez devoir rechercher la zone masquée intitulée « les membres de package » et la développer. La méthode d' Initialize est dans cette zone masquée.
à la méthode d' Initialize , ajoutez la ligne suivante juste après le dernier appel à la méthode d' AddCommand . InitMRUMenu sera indéfini tant que l'étape 8.
this.InitMRUMenu(mcs);
À la fin de la classe d' MyTopLevelMenuPackage , ajoutez le code suivant juste après la méthode d' SubItemCallback . Ce code initialise la liste de chaînes représentant les éléments à afficher dans la liste des fichiers récents.
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)); } } } }
après la méthode d' InitializeMRUList , ajoutez la méthode suivante d' InitMRUMenu . Cette opération lance les commandes de menu de liste des fichiers récents.
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); } }
en code managé, vous devez créer un objet de commande de menu pour chaque élément possible dans la liste des fichiers récents. L'IDE appelle la méthode d' OnMRUQueryStatus pour chaque élément de la liste des fichiers récents jusqu'à ce qu'il reste encore d'éléments. En code managé, le seul moyen à l'IDE sache qu'il ne contient aucun élément est de 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'aide de mc.Visible = false; après la commande de menu a été créée. Ces éléments peuvent ensuite être rendus visibles ultérieurement à l'aide de mc.Visible = true; dans la méthode d' OnMRUQueryStatus .
après la méthode d' InitMRUMenu , ajoutez la méthode suivante d' OnMRUQueryStatus . c'est le gestionnaire qui définit le texte pour chaque élément de 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 méthode d' OnMRUQueryStatus , ajoutez la méthode suivante d' OnMRUExec . Il s'agit du gestionnaire pour sélectionner un élément de MRU. Cette méthode déplace l'élément sélectionné en haut de la liste puis affiche l'élément sélectionné dans un 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)); } } }
Dans le menu Générer, cliquez sur Générer la solution pour générer la solution. corrigez toutes les erreurs qui peuvent se produire.
tester la liste des fichiers récents
pour tester la liste de menu de MRU
Appuyez sur F5 pour tester l'affichage de la nouvelle.
Dans le menu de TestMenu , cliquez sur commande de test. Cela affiche un message qui indique que la commande a été sélectionnée.
Notes
Cette étape est nécessaire pour forcer le VSPackage pour charger et afficher correctement la liste des fichiers récents.si vous ignorez cette étape, la liste des fichiers récents n'est pas affichée.
Dans le menu de menu de test , cliquez sur Sous-menu. Une liste de quatre éléments s'affiche à la fin de le sous-menu, situés sous un séparateur. Lorsque vous cliquez sur point 3, un 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, assurez -vous que vous avez suivi les instructions à l'étape précédente.)
ouvrez le sous-menu de nouveau. Notez que point 3 est maintenant en haut de la liste et les autres éléments ont été abaissés une position. Cliquez sur point 3 à nouveau et remarquez que le message affiche toujours « élément sélectionné 3 ", ce qui indique que le texte comporte correctement déplacé à la nouvelle position avec le nom de commande.
Voir aussi
Tâches
Comment : Ajoutez de façon dynamique des éléments de menu
Autres ressources
Procédures pas - à - pas pour les commandes, de menus, et les barres d'outils