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
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
.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"/>
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.
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>
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>
Skompiluj rozwiązanie i rozpocznij debugowanie. Powinno zostać wyświetlone wystąpienie eksperymentalne.
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
Otwórz plik TestCommand.cs i dodaj następujący identyfikator polecenia po istniejącym identyfikatorze polecenia.
public const int cmdidTestSubCmd = 0x0105;
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); } }
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); }
Skompiluj projekt i rozpocznij debugowanie. Powinno zostać wyświetlone wystąpienie eksperymentalne.
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()".