Udostępnij za pośrednictwem


Dodawanie podmenu do menu

Ten przewodnik jest oparty na pokazie w temacie Dodawanie menu do paska menu programu Visual Studio, pokazując, jak dodać podmenu do menu TestMenu .

Podmenu to menu pomocnicze, które jest wyświetlane w innym menu. Podmenu można zidentyfikować za pomocą strzałki, która jest zgodna z jego nazwą. Kliknięcie nazwy powoduje wyświetlenie podmenu i jego poleceń.

Ten przewodnik tworzy podmenu w menu na pasku menu programu Visual Studio i umieszcza nowe polecenie w podmenu. Przewodnik implementuje również nowe polecenie.

Dodawanie podmenu do menu

  1. Wykonaj kroki opisane w temacie Dodawanie menu do paska menu programu Visual Studio, aby utworzyć projekt i element menu. W krokach w tym przewodniku przyjęto założenie, że nazwa projektu VSIX to TopLevelMenu.

  2. Otwórz plik TestCommandPackage.vsct. <Symbols> W sekcji dodaj <IDSymbol> element dla podmenu, jeden dla grupy podmenu i jeden dla polecenia, wszystkie w węźle <GuidSymbol> o nazwie "guidTopLevelMenuCmdSet". Jest to ten sam węzeł, który zawiera <IDSymbol> element menu najwyższego poziomu.

    <IDSymbol name="SubMenu" value="0x1100"/>
    <IDSymbol name="SubMenuGroup" value="0x1150"/>
    <IDSymbol name="cmdidTestSubCommand" value="0x0105"/>
    
  3. Dodaj nowo utworzony podmenu do <Menus> sekcji .

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

    Para identyfikatorów GUID/ID elementu nadrzędnego określa grupę menu, która została wygenerowana w menu Dodaj menu do paska menu programu Visual Studio i jest elementem podrzędnym menu najwyższego poziomu.

  4. Dodaj grupę menu zdefiniowaną w kroku 2 do <Groups> sekcji i ustaw ją jako element podrzędny podmenu.

    <Group guid="guidTestCommandPackageCmdSet" id="SubMenuGroup" priority="0x0000">
        <Parent guid="guidTestCommandPackageCmdSet" id="SubMenu"/>
    </Group>
    
  5. Dodaj nowy <Button> element do sekcji, <Buttons> aby zdefiniować polecenie utworzone w kroku 2 jako element w podmenu.

    <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. Skompiluj rozwiązanie i rozpocznij debugowanie. Powinno zostać wyświetlone wystąpienie eksperymentalne.

  7. Kliknij pozycję TestMenu , aby wyświetlić nowy podmenu o nazwie Sub Menu. Kliknij polecenie Podmenu , aby otworzyć podmenu i wyświetlić nowe polecenie Test Sub Command. Zwróć uwagę, że kliknięcie polecenia Test Sub nie powoduje niczego.

Dodawanie polecenia

  1. Otwórz plik TestCommand.cs i dodaj następujący identyfikator polecenia po istniejącym identyfikatorze polecenia.

    public const int cmdidTestSubCmd = 0x0105;
    
  2. Dodaj polecenie podrzędne. Znajdź konstruktora poleceń. Dodaj następujące wiersze tuż po wywołaniu AddCommand metody .

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

    Procedura obsługi poleceń zostanie zdefiniowana SubItemCallback później. Konstruktor powinien teraz wyglądać następująco:

    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. Dodaj SubItemCallback()element . Jest to metoda wywoływana po kliknięciu nowego polecenia w podmenu.

    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. Skompiluj projekt i rozpocznij debugowanie. Powinno zostać wyświetlone wystąpienie eksperymentalne.

  5. W menu TestMenu kliknij pozycję Podmenu, a następnie kliknij pozycję Test Sub Command (Testuj podzadania). Powinno zostać wyświetlone pole komunikatu i wyświetlić tekst "Test Command Inside TestCommand.SubItemCallback()".