Ajouter un sous-menu à un menu
Cette procédure pas à pas s’appuie sur la démonstration dans Ajouter un menu à la barre de menus Visual Studio en montrant comment ajouter un sous-menu au menu TestMenu .
Un sous-menu est un menu secondaire qui apparaît dans un autre menu. Un sous-menu peut être identifié par la flèche qui suit son nom. Le fait de cliquer sur le nom entraîne l’affichage du sous-menu et de ses commandes.
Cette procédure pas à pas crée un sous-menu dans un menu de la barre de menus de Visual Studio et place une nouvelle commande dans le sous-menu. La procédure pas à pas implémente également la nouvelle commande.
Ajouter un sous-menu à un menu
Suivez les étapes décrites dans Ajouter un menu à la barre de menus de Visual Studio pour créer le projet et l’élément de menu. Les étapes décrites dans cette procédure pas à pas supposent que le nom du projet VSIX est
TopLevelMenu
.Ouvrez TestCommandPackage.vsct. Dans la
<Symbols>
section, ajoutez un<IDSymbol>
élément pour le sous-menu, un pour le groupe de sous-menus et un pour la commande, tous dans le<GuidSymbol>
nœud nommé « guidTopLevelMenuCmdSet ». Il s’agit du même nœud que celui qui contient l’élément<IDSymbol>
du menu de niveau supérieur.<IDSymbol name="SubMenu" value="0x1100"/> <IDSymbol name="SubMenuGroup" value="0x1150"/> <IDSymbol name="cmdidTestSubCommand" value="0x0105"/>
Ajoutez le sous-menu nouvellement créé à la
<Menus>
section.<Menu guid="guidTestCommandPackageCmdSet" id="SubMenu" priority="0x0100" type="Menu"> <Parent guid="guidTestCommandPackageCmdSet" id="MyMenuGroup"/> <Strings> <ButtonText>Sub Menu</ButtonText> <CommandName>Sub Menu</CommandName> </Strings> </Menu>
La paire GUID/ID du parent spécifie le groupe de menus généré dans Ajouter un menu à la barre de menus Visual Studio et est un enfant du menu de niveau supérieur.
Ajoutez le groupe de menus défini à l’étape 2 à la
<Groups>
section et définissez-le comme enfant du sous-menu.<Group guid="guidTestCommandPackageCmdSet" id="SubMenuGroup" priority="0x0000"> <Parent guid="guidTestCommandPackageCmdSet" id="SubMenu"/> </Group>
Ajoutez un nouvel
<Button>
élément à la<Buttons>
section pour définir la commande créée à l’étape 2 en tant qu’élément du sous-menu.<Button guid="guidTestCommandPackageCmdSet" id="cmdidTestSubCommand" priority="0x0000" type="Button"> <Parent guid="guidTestCommandPackageCmdSet" id="SubMenuGroup" /> <Icon guid="guidImages" id="bmpPic2" /> <Strings> <CommandName>cmdidTestSubCommand</CommandName> <ButtonText>Test Sub Command</ButtonText> </Strings> </Button>
Générez la solution et commencez le débogage. Vous devez voir l’instance expérimentale.
Cliquez sur TestMenu pour afficher un nouveau sous-menu nommé Sub Menu. Cliquez sur Sous-menu pour ouvrir le sous-menu et voir une nouvelle commande, Test Sub Command. Notez que le fait de cliquer sur La sous-commande test ne fait rien.
Ajouter une commande
Ouvrez TestCommand.cs et ajoutez l’ID de commande suivant après l’ID de commande existant.
public const int cmdidTestSubCmd = 0x0105;
Ajoutez la sous-commande. Recherchez le constructeur de commandes. Ajoutez les lignes suivantes juste après l’appel à la
AddCommand
méthode.CommandID subCommandID = new CommandID(CommandSet, cmdidTestSubCmd); MenuCommand subItem = new MenuCommand(new EventHandler(SubItemCallback), subCommandID); commandService.AddCommand(subItem);
Le
SubItemCallback
gestionnaire de commandes sera défini ultérieurement. Le constructeur doit maintenant ressembler à ceci :private TestCommand(Package package) { if (package == null) { throw new ArgumentNullException("package"); } this.package = package; OleMenuCommandService commandService = this.ServiceProvider.GetService(typeof(IMenuCommandService)) as OleMenuCommandService; if (commandService != null) { var menuCommandID = new CommandID(CommandSet, CommandId); var menuItem = new MenuCommand(this.MenuItemCallback, menuCommandID); commandService.AddCommand(menuItem); CommandID subCommandID = new CommandID(CommandSet, cmdidTestSubCmd); MenuCommand subItem = new MenuCommand(new EventHandler(SubItemCallback), subCommandID); commandService.AddCommand(subItem); } }
Ajoutez
SubItemCallback()
. Il s’agit de la méthode appelée lorsque la nouvelle commande du sous-menu est cliqué.private void SubItemCallback(object sender, EventArgs e) { ThreadHelper.ThrowIfNotOnUIThread(); IVsUIShell uiShell = this.package.GetService<SVsUIShell, IVsUIShell>(); Guid clsid = Guid.Empty; int result; uiShell.ShowMessageBox( 0, ref clsid, "TestCommand", string.Format(CultureInfo.CurrentCulture, "Inside TestCommand.SubItemCallback()", this.ToString()), string.Empty, 0, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST, OLEMSGICON.OLEMSGICON_INFO, 0, out result); }
Générez le projet et commencez le débogage. L’instance expérimentale doit apparaître.
Dans le menu TestMenu , cliquez sur Sous-menu , puis sur Test Sub Command. Une zone de message doit apparaître et afficher le texte « Test Command Inside TestCommand.SubItemCallback() ».