Menambahkan pengontrol menu ke toolbar
Panduan ini dibangun pada panduan Tambahkan toolbar ke jendela alat dan menunjukkan cara menambahkan pengontrol menu ke toolbar jendela alat. Langkah-langkah yang ditampilkan di sini juga dapat diterapkan ke toolbar yang dibuat di panduan Tambahkan toolbar .
Pengontrol menu adalah kontrol terpisah. Sisi kiri pengontrol menu menunjukkan perintah yang terakhir digunakan, dan Anda dapat menjalankannya dengan mengkliknya. Sisi kanan pengontrol menu adalah panah yang, saat diklik, membuka daftar perintah tambahan. Saat Anda mengklik perintah pada daftar, perintah berjalan, dan menggantikan perintah di sisi kiri pengontrol menu. Dengan cara ini, pengontrol menu beroperasi seperti tombol perintah yang selalu menampilkan perintah yang terakhir digunakan dari daftar.
Pengontrol menu dapat muncul pada menu tetapi paling sering digunakan pada toolbar.
Membuat pengontrol menu
Ikuti prosedur yang dijelaskan di Tambahkan toolbar ke jendela alat untuk membuat jendela alat yang memiliki toolbar.
Di TWTestCommandPackage.vsct, buka bagian Simbol. Dalam elemen GuidSymbol bernama guidTWTestCommandPackageCmdSet, deklarasikan pengontrol menu, grup pengontrol menu, dan tiga item menu Anda.
<IDSymbol name="TestMenuController" value="0x1300" /><IDSymbol name="TestMenuControllerGroup" value="0x1060" /><IDSymbol name="cmdidMCItem1" value="0x0130" /><IDSymbol name="cmdidMCItem2" value="0x0131" /><IDSymbol name="cmdidMCItem3" value="0x0132" />
Di bagian Menu, setelah entri menu terakhir, tentukan pengontrol menu sebagai menu.
<Menu guid="guidTWTestCommandPackageCmdSet" id="TestMenuController" priority="0x0100" type="MenuController"> <Parent guid="guidTWTestCommandPackageCmdSet" id="TWToolbarGroup" /> <CommandFlag>IconAndText</CommandFlag> <CommandFlag>TextChanges</CommandFlag> <CommandFlag>TextIsAnchorCommand</CommandFlag> <Strings> <ButtonText>Test Menu Controller</ButtonText> <CommandName>Test Menu Controller</CommandName> </Strings> </Menu>
Bendera
TextChanges
danTextIsAnchorCommand
harus disertakan untuk mengaktifkan pengontrol menu untuk mencerminkan perintah terakhir yang dipilih.Di bagian Grup, setelah entri grup terakhir, tambahkan grup pengontrol menu.
<Group guid="guidTWTestCommandPackageCmdSet" id="TestMenuControllerGroup" priority="0x000"> <Parent guid="guidTWTestCommandPackageCmdSet" id="TestMenuController" /> </Group>
Dengan mengatur pengontrol menu sebagai induk, perintah apa pun yang ditempatkan dalam grup ini muncul di pengontrol menu. Atribut
priority
dihilangkan, yang mengaturnya ke nilai default 0, karena itu adalah satu-satunya grup pada pengontrol menu.Di bagian Tombol, setelah entri tombol terakhir, tambahkan elemen Tombol untuk setiap item menu Anda.
<Button guid="guidTWTestCommandPackageCmdSet" id="cmdidMCItem1" priority="0x0000" type="Button"> <Parent guid="guidTWTestCommandPackageCmdSet" id="TestMenuControllerGroup" /> <Icon guid="guidImages" id="bmpPic1" /> <CommandFlag>IconAndText</CommandFlag> <Strings> <ButtonText>MC Item 1</ButtonText> <CommandName>MC Item 1</CommandName> </Strings> </Button> <Button guid="guidTWTestCommandPackageCmdSet" id="cmdidMCItem2" priority="0x0100" type="Button"> <Parent guid="guidTWTestCommandPackageCmdSet" id="TestMenuControllerGroup" /> <Icon guid="guidImages" id="bmpPic2" /> <CommandFlag>IconAndText</CommandFlag> <Strings> <ButtonText>MC Item 2</ButtonText> <CommandName>MC Item 2</CommandName> </Strings> </Button> <Button guid="guidTWTestCommandPackageCmdSet" id="cmdidMCItem3" priority="0x0200" type="Button"> <Parent guid="guidTWTestCommandPackageCmdSet" id="TestMenuControllerGroup" /> <Icon guid="guidImages" id="bmpPicSearch" /> <CommandFlag>IconAndText</CommandFlag> <Strings> <ButtonText>MC Item 3</ButtonText> <CommandName>MC Item 3</CommandName> </Strings> </Button>
Pada titik ini, Anda dapat melihat pengontrol menu. Bangun proyek dan mulai penelusuran kesalahan. Anda akan melihat instans eksperimental.
Pada menu Lihat/Windows Lainnya, buka Test ToolWindow.
Pengontrol menu muncul pada toolbar di jendela alat.
Klik panah di sisi kanan pengontrol menu untuk melihat tiga perintah yang mungkin.
Perhatikan bahwa saat Anda mengklik perintah, judul pengontrol menu berubah untuk menampilkan perintah tersebut. Di bagian berikutnya, kita akan menambahkan kode untuk mengaktifkan perintah ini.
Menerapkan perintah pengontrol menu
Di TWTestCommandPackageGuids.cs, tambahkan ID perintah untuk tiga item menu Anda setelah ID perintah yang ada.
public const int cmdidMCItem1 = 0x130; public const int cmdidMCItem2 = 0x131; public const int cmdidMCItem3 = 0x132;
Di TWTestCommand.cs, tambahkan kode berikut di bagian
TWTestCommand
atas kelas.private int currentMCCommand; // The currently selected menu controller command
Di konstruktor TWTestCommand, setelah panggilan terakhir ke
AddCommand
metode , tambahkan kode untuk merutekan peristiwa untuk setiap perintah melalui handler yang sama.for (int i = TWTestCommandPackageGuids.cmdidMCItem1; i <= TWTestCommandPackageGuids.cmdidMCItem3; i++) { CommandID cmdID = new CommandID(new Guid(TWTestCommandPackageGuids.guidTWTestCommandPackageCmdSet), i); OleMenuCommand mc = new OleMenuCommand(new EventHandler(OnMCItemClicked), cmdID); mc.BeforeQueryStatus += new EventHandler(OnMCItemQueryStatus); commandService.AddCommand(mc); // The first item is, by default, checked. if (TWTestCommandPackageGuids.cmdidMCItem1 == i) { mc.Checked = true; this.currentMCCommand = i; } }
Tambahkan penanganan aktivitas ke kelas TWTestCommand untuk menandai perintah yang dipilih sebagai dicentang.
private void OnMCItemQueryStatus(object sender, EventArgs e) { OleMenuCommand mc = sender as OleMenuCommand; if (null != mc) { mc.Checked = (mc.CommandID.ID == this.currentMCCommand); } }
Tambahkan penanganan aktivitas yang menampilkan MessageBox saat pengguna memilih perintah pada pengontrol menu:
private void OnMCItemClicked(object sender, EventArgs e) { OleMenuCommand mc = sender as OleMenuCommand; if (null != mc) { string selection; switch (mc.CommandID.ID) { case c.cmdidMCItem1: selection = "Menu controller Item 1"; break; case TWTestCommandPackageGuids.cmdidMCItem2: selection = "Menu controller Item 2"; break; case TWTestCommandPackageGuids.cmdidMCItem3: selection = "Menu controller Item 3"; break; default: selection = "Unknown command"; break; } this.currentMCCommand = mc.CommandID.ID; IVsUIShell uiShell = (IVsUIShell) ServiceProvider.GetService(typeof(SVsUIShell)); Guid clsid = Guid.Empty; int result; uiShell.ShowMessageBox( 0, ref clsid, "Test Tool Window Toolbar Package", string.Format(CultureInfo.CurrentCulture, "You selected {0}", selection), string.Empty, 0, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST, OLEMSGICON.OLEMSGICON_INFO, 0, out result); } }
Menguji pengontrol menu
Bangun proyek dan mulai penelusuran kesalahan. Anda akan melihat instans eksperimental.
Buka Test ToolWindow pada menu Lihat/ Windows Lainnya.
Pengontrol menu muncul di toolbar di jendela alat dan menampilkan MC Item 1.
Klik tombol pengontrol menu di sebelah kiri panah.
Anda akan melihat tiga item, yang pertama dipilih dan memiliki kotak sorotan di sekitar ikonnya. Klik MC Item 3.
Kotak dialog muncul dengan pesan Item Pengontrol Menu yang Anda pilih 3. Perhatikan bahwa pesan sesuai dengan teks pada tombol pengontrol menu. Tombol pengontrol menu sekarang menampilkan MC Item 3.