Compartilhar via


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

  1. 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.

  2. 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"/>
    
  3. 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.

  4. 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>
    
  5. 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>
    
  6. Compile a solução e inicie a depuração. Você deve ver a instância experimental.

  7. 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

  1. Abra TestCommand.cs e adicione a seguinte ID de comando após a ID de comando existente.

    public const int cmdidTestSubCmd = 0x0105;
    
  2. 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);
        }
    }
    
  3. 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);
    }
    
  4. Compile o projeto e comece a depuração. A instância experimental deve aparecer.

  5. 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()".