Condividi tramite


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

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

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

  4. 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>
    
  5. 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>
    
  6. Creare la soluzione e avviare il debug. Verrà visualizzata l'istanza sperimentale.

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

  1. Aprire TestCommand.cs e aggiungere l'ID comando seguente dopo l'ID comando esistente.

    public const int cmdidTestSubCmd = 0x0105;
    
  2. 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);
        }
    }
    
  3. 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);
    }
    
  4. Compilare il progetto e avviare il debug. Verrà visualizzata l'istanza sperimentale.

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