Menambahkan Submenu ke Menu
Panduan ini dibangun berdasarkan demonstrasi di Tambahkan Menu ke Bilah Menu Visual Studio dengan memperlihatkan cara menambahkan submenu ke menu TestMenu .
Submenu adalah menu sekunder yang muncul di menu lain. Submenu dapat diidentifikasi dengan panah yang mengikuti namanya. Mengklik nama menyebabkan submenu dan perintahnya ditampilkan.
Panduan ini membuat submenu di menu pada bilah menu Visual Studio dan menempatkan perintah baru pada submenu. Panduan ini juga mengimplementasikan perintah baru.
Menambahkan Submenu ke Menu
Ikuti langkah-langkah di Tambahkan Menu ke Bilah Menu Visual Studio untuk membuat item proyek dan menu. Langkah-langkah dalam panduan ini mengasumsikan bahwa nama proyek VSIX adalah
TopLevelMenu
.Buka TestCommandPackage.vsct. Di bagian ,
<Symbols>
tambahkan<IDSymbol>
elemen untuk submenu, satu untuk grup submenu, dan satu untuk perintah, semuanya dalam<GuidSymbol>
simpul bernama "guidTopLevelMenuCmdSet." Ini adalah node yang sama yang berisi<IDSymbol>
elemen untuk menu tingkat atas.<IDSymbol name="SubMenu" value="0x1100"/> <IDSymbol name="SubMenuGroup" value="0x1150"/> <IDSymbol name="cmdidTestSubCommand" value="0x0105"/>
Tambahkan submenu yang baru dibuat ke bagian
<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>
Pasangan GUID/ID induk menentukan grup menu yang dihasilkan di Tambahkan Menu ke Bilah Menu Visual Studio, dan merupakan anak dari menu tingkat atas.
Tambahkan grup menu yang ditentukan di langkah 2 ke bagian
<Groups>
dan jadikan itu anak dari submenu.<Group guid="guidTestCommandPackageCmdSet" id="SubMenuGroup" priority="0x0000"> <Parent guid="guidTestCommandPackageCmdSet" id="SubMenu"/> </Group>
Tambahkan elemen baru
<Button>
ke bagian<Buttons>
untuk menentukan perintah yang dibuat di langkah 2 sebagai item pada 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>
Bangun solusi dan mulai penelusuran kesalahan. Anda akan melihat instans eksperimental.
Klik TestMenu untuk melihat submenu baru bernama Sub Menu. Klik Sub Menu untuk membuka submenu dan melihat perintah baru, Uji Sub Perintah. Perhatikan bahwa mengklik Uji Sub Perintah tidak melakukan apa pun.
Menambahkan Perintah
Buka TestCommand.cs dan tambahkan ID perintah berikut setelah ID perintah yang ada.
public const int cmdidTestSubCmd = 0x0105;
Tambahkan sub-perintah. Temukan konstruktor perintah. Tambahkan baris berikut tepat setelah panggilan ke
AddCommand
metode .CommandID subCommandID = new CommandID(CommandSet, cmdidTestSubCmd); MenuCommand subItem = new MenuCommand(new EventHandler(SubItemCallback), subCommandID); commandService.AddCommand(subItem);
Handler
SubItemCallback
perintah akan ditentukan nanti. Konstruktor sekarang akan terlihat seperti ini: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); } }
Tambahkan
SubItemCallback()
. Ini adalah metode yang dipanggil ketika perintah baru dalam submenu diklik.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); }
Bangun proyek dan mulai penelusuran kesalahan. Instans eksperimental akan muncul.
Pada menu TestMenu , klik Sub Menu lalu klik Uji Sub Perintah. Kotak pesan akan muncul dan menampilkan teks, "Perintah Uji Di Dalam TestCommand.SubItemCallback()".