Přidání podnabídky do nabídky

Tento názorný postup vychází z ukázky v nabídce Přidat nabídku na řádek nabídek sady Visual Studio tím, že ukazuje, jak přidat podnabídku do nabídky TestMenu .

Podnabídka je sekundární nabídka, která se zobrazí v jiné nabídce. Podnabídku lze identifikovat pomocí šipky, která následuje za jejím názvem. Po kliknutí na název se podnabídka a její příkazy zobrazí.

Tento návod vytvoří podnabídku v nabídce na řádku nabídek sady Visual Studio a vloží nový příkaz do podnabídky. Průvodce také implementuje nový příkaz.

Přidání podnabídky do nabídky

  1. Podle pokynů v části Přidat nabídku na řádek nabídek sady Visual Studio vytvořte projekt a položku nabídky. Kroky v tomto návodu předpokládají, že název projektu VSIX je TopLevelMenu.

  2. Otevřete TestCommandPackage.vsct. <Symbols> V části přidejte <IDSymbol> prvek pro podnabídku, jeden pro skupinu podnabídek a druhý pro příkaz, vše v <GuidSymbol> uzlu s názvem guidTopLevelMenuCmdSet. Jedná se o stejný uzel, který obsahuje <IDSymbol> prvek pro nabídku nejvyšší úrovně.

    <IDSymbol name="SubMenu" value="0x1100"/>
    <IDSymbol name="SubMenuGroup" value="0x1150"/>
    <IDSymbol name="cmdidTestSubCommand" value="0x0105"/>
    
  3. Přidejte do oddílu nově vytvořenou podnabídku <Menus> .

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

    Dvojice GUID/ID nadřazeného objektu určuje skupinu nabídek vygenerovanou v nabídce Přidat do řádku nabídek sady Visual Studio a je podřízenou položkou nabídky nejvyšší úrovně.

  4. Přidejte skupinu nabídek definovanou v kroku 2 do oddílu <Groups> a nastavte ji jako podřízenou podnabídku.

    <Group guid="guidTestCommandPackageCmdSet" id="SubMenuGroup" priority="0x0000">
        <Parent guid="guidTestCommandPackageCmdSet" id="SubMenu"/>
    </Group>
    
  5. Přidejte do oddílu <Buttons> nový <Button> prvek, který definuje příkaz vytvořený v kroku 2 jako položku v podnabídce.

    <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. Sestavte řešení a spusťte ladění. Měla by se zobrazit experimentální instance.

  7. Kliknutím na testMenu zobrazíte novou podnabídku s názvem Podnabídka. Kliknutím na podnabídku otevřete podnabídku a zobrazí se nový příkaz Test Sub Command. Všimněte si, že kliknutí na příkaz Test Sub nic nedělá.

Přidání příkazu

  1. Otevřete TestCommand.cs a za existující ID příkazu přidejte následující ID příkazu.

    public const int cmdidTestSubCmd = 0x0105;
    
  2. Přidejte dílčí příkaz. Vyhledejte konstruktor příkazů. Přidejte následující řádky těsně za volání metody AddCommand .

    CommandID subCommandID = new CommandID(CommandSet, cmdidTestSubCmd);
    MenuCommand subItem = new MenuCommand(new EventHandler(SubItemCallback), subCommandID);
    commandService.AddCommand(subItem);
    

    Obslužná rutina SubItemCallback příkazu bude definována později. Konstruktor by teď měl vypadat takto:

    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. Přidat SubItemCallback(). Jedná se o metodu, která se volá při kliknutí na nový příkaz v podnabídce.

    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. Sestavte projekt a spusťte ladění. Měla by se zobrazit experimentální instance.

  5. V nabídce TestMenu klepněte na příkaz Sub Menu a potom klepněte na příkaz Test Sub. Mělo by se zobrazit okno se zprávou a zobrazit text "Test Command Inside TestCommand.SubItemCallback()".