Adicionar um submenu a um menu
Este passo a passo baseia-se na demonstração em Adicionar um menu à barra de menus do Visual Studio, mostrando como adicionar um submenu ao menu TestMenu .
Um submenu é um menu secundário que aparece em outro menu. Um submenu pode ser identificado pela seta que segue seu nome. Clicar no nome faz com que o submenu e seus comandos sejam exibidos.
Este passo a passo cria um submenu em um menu na barra de menus do Visual Studio e coloca um novo comando no submenu. O passo a passo também implementa o novo comando.
Adicionar um submenu a um menu
Siga as etapas em Adicionar um menu à barra de menus do Visual Studio para criar o projeto e o item de menu. As etapas neste passo a passo pressupõem que o nome do projeto VSIX é
TopLevelMenu
.Abra TestCommandPackage.vsct.
<Symbols>
Na seção, adicione um elemento para o submenu, um para o grupo de submenus e um<IDSymbol>
para o<GuidSymbol>
comando, todos no nó chamado "guidTopLevelMenuCmdSet". Este é o mesmo nó que contém o elemento para o<IDSymbol>
menu de nível superior.<IDSymbol name="SubMenu" value="0x1100"/> <IDSymbol name="SubMenuGroup" value="0x1150"/> <IDSymbol name="cmdidTestSubCommand" value="0x0105"/>
Adicione o submenu recém-criado à
<Menus>
seção.<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>
O par GUID/ID do pai especifica o grupo de menus que foi gerado em Adicionar um menu à barra de menus do Visual Studio e é filho do menu de nível superior.
Adicione o grupo de menus definido na etapa 2 à
<Groups>
seção e torne-o um filho do submenu.<Group guid="guidTestCommandPackageCmdSet" id="SubMenuGroup" priority="0x0000"> <Parent guid="guidTestCommandPackageCmdSet" id="SubMenu"/> </Group>
Adicione um novo
<Button>
elemento à<Buttons>
seção para definir o comando criado na etapa 2 como um item no submenu.<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>
Compile a solução e inicie a depuração. Você deve ver a instância experimental.
Clique em TestMenu para ver um novo submenu chamado Sub Menu. Clique em Submenu para abrir o submenu e ver um novo comando, Test Sub Command. Observe que clicar em Testar Subcomando não faz nada.
Adicionar um comando
Abra TestCommand.cs e adicione a seguinte ID de comando após a ID de comando existente.
public const int cmdidTestSubCmd = 0x0105;
Adicione o subcomando. Localize o construtor de comando. Adicione as seguintes linhas logo após a chamada ao
AddCommand
método.CommandID subCommandID = new CommandID(CommandSet, cmdidTestSubCmd); MenuCommand subItem = new MenuCommand(new EventHandler(SubItemCallback), subCommandID); commandService.AddCommand(subItem);
O
SubItemCallback
manipulador de comandos será definido posteriormente. O construtor agora deve ter esta aparência: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); } }
Adicione
SubItemCallback()
. Esse é o método chamado quando o novo comando no submenu é clicado.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); }
Compile o projeto e comece a depuração. A instância experimental deve aparecer.
No menu TestMenu , clique em Sub Menu e, em seguida, clique em Test Sub Command . Uma caixa de mensagem deve aparecer e exibir o texto, "Test Command Inside TestCommand.SubItemCallback()".