Aggiungere un sottomenu a un menu
Questa procedura dettagliata si basa sulla dimostrazione in Aggiungere un menu alla barra dei menu di Visual Studio mostrando come aggiungere un sottomenu al menu TestMenu .
Un sottomenu è un menu secondario visualizzato in un altro menu. Un sottomenu può essere identificato dalla freccia che segue il nome. Facendo clic sul nome, il sottomenu e i relativi comandi verranno visualizzati.
Questa procedura dettagliata crea un sottomenu in un menu sulla barra dei menu di Visual Studio e inserisce un nuovo comando nel sottomenu. La procedura dettagliata implementa anche il nuovo comando.
Aggiungere un sottomenu a un menu
Seguire la procedura descritta in Aggiungere un menu alla barra dei menu di Visual Studio per creare il progetto e la voce di menu. I passaggi di questa procedura dettagliata presuppongono che il nome del progetto VSIX sia
TopLevelMenu
.Aprire TestCommandPackage.vsct.
<Symbols>
Nella sezione aggiungere un<IDSymbol>
elemento per il sottomenu, uno per il gruppo di sottomenu e uno per il comando, tutto nel<GuidSymbol>
nodo denominato "guidTopLevelMenuCmdSet". Si tratta dello stesso nodo che contiene l'elemento<IDSymbol>
per il menu di primo livello.<IDSymbol name="SubMenu" value="0x1100"/> <IDSymbol name="SubMenuGroup" value="0x1150"/> <IDSymbol name="cmdidTestSubCommand" value="0x0105"/>
Aggiungere il sottomenu appena creato alla
<Menus>
sezione .<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 coppia GUID/ID dell'elemento padre specifica il gruppo di menu generato in Aggiungi un menu alla barra dei menu di Visual Studio ed è figlio del menu di primo livello.
Aggiungere il gruppo di menu definito nel passaggio 2 alla
<Groups>
sezione e impostarlo come elemento figlio del sottomenu.<Group guid="guidTestCommandPackageCmdSet" id="SubMenuGroup" priority="0x0000"> <Parent guid="guidTestCommandPackageCmdSet" id="SubMenu"/> </Group>
Aggiungere un nuovo
<Button>
elemento alla<Buttons>
sezione per definire il comando creato nel passaggio 2 come elemento nel sottomenu.<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>
Creare la soluzione e avviare il debug. Verrà visualizzata l'istanza sperimentale.
Fare clic su TestMenu per visualizzare un nuovo sottomenu denominato SottoMenu. Fare clic su Sottomenu per aprire il sottomenu e visualizzare un nuovo comando, Test Sub Command. Si noti che facendo clic su Test Sub Command non viene eseguita alcuna operazione.
Aggiungere un comando
Aprire TestCommand.cs e aggiungere l'ID comando seguente dopo l'ID comando esistente.
public const int cmdidTestSubCmd = 0x0105;
Aggiungere il sottocom commando. Trovare il costruttore del comando. Aggiungere le righe seguenti subito dopo la chiamata al
AddCommand
metodo .CommandID subCommandID = new CommandID(CommandSet, cmdidTestSubCmd); MenuCommand subItem = new MenuCommand(new EventHandler(SubItemCallback), subCommandID); commandService.AddCommand(subItem);
Il
SubItemCallback
gestore dei comandi verrà definito in un secondo momento. Il costruttore dovrebbe ora essere simile al seguente: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); } }
Aggiungere
SubItemCallback()
. Si tratta del metodo chiamato quando si fa clic sul nuovo comando nel sottomenu.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); }
Compilare il progetto e avviare il debug. Verrà visualizzata l'istanza sperimentale.
Scegliere Sottomenu dal menu TestMenu e quindi fare clic su Test Sub Command (Test Sub Command). Verrà visualizzata una finestra di messaggio e verrà visualizzato il testo "Test Command Inside TestCommand.SubItemCallback()".