Araç çubuğuna menü denetleyicisi ekleme
Bu izlenecek yol, Araç penceresine araç çubuğu ekleme kılavuzunda derlenip araç penceresi araç çubuğuna nasıl menü denetleyicisi ekleneceğini gösterir. Burada gösterilen adımlar, Araç çubuğu ekleme kılavuzunda oluşturulan araç çubuğuna da uygulanabilir.
Menü denetleyicisi bölünmüş bir denetimdir. Menü denetleyicisinin sol tarafında son kullanılan komut gösterilir ve bunu tıklayarak çalıştırabilirsiniz. Menü denetleyicisinin sağ tarafında, tıklandığında ek komutların listesini açan bir ok bulunur. Listede bir komuta tıkladığınızda, komut çalışır ve menü denetleyicisinin sol tarafındaki komutun yerini alır. Bu şekilde, menü denetleyicisi her zaman bir listeden son kullanılan komutu gösteren bir komut düğmesi gibi çalışır.
Menü denetleyicileri menülerde görünebilir, ancak en sık araç çubuklarında kullanılırlar.
Menü denetleyicisi oluşturma
Araç çubuğu olan bir araç penceresi oluşturmak için Araç çubuğu ekleme penceresinde açıklanan yordamları izleyin.
TWTestCommandPackage.vsct dosyasında Simgeler bölümüne gidin. guidTWTestCommandPackageCmdSet adlı GuidSymbol öğesinde, menü denetleyicinizi, menü denetleyicisi grubunuzu ve üç menü öğesini bildirin.
<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" />
Menüler bölümünde, son menü girdisinin ardından menü denetleyicisini menü olarak tanımlayın.
<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>
Menü denetleyicisinin
TextChanges
seçili son komutu yansıtması için veTextIsAnchorCommand
bayraklarının eklenmesi gerekir.Gruplar bölümünde, son grup girdisinin ardından menü denetleyicisi grubunu ekleyin.
<Group guid="guidTWTestCommandPackageCmdSet" id="TestMenuControllerGroup" priority="0x000"> <Parent guid="guidTWTestCommandPackageCmdSet" id="TestMenuController" /> </Group>
Menü denetleyicisini üst öğe olarak ayarlayarak, bu gruba yerleştirilen tüm komutlar menü denetleyicisinde görünür.
priority
Öznitelik atlanır ve bu değer, menü denetleyicisindeki tek grup olduğundan bunu varsayılan 0 değerine ayarlar.Düğmeler bölümünde, son düğme girdisinin ardından menü öğelerinizin her biri için bir Düğme öğesi ekleyin.
<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>
Bu noktada menü denetleyicisine bakabilirsiniz. Projeyi derleyin ve hata ayıklamaya başlayın. Deneysel örneği görmeniz gerekir.
Görünüm / Diğer Windows menüsünde Test AracıWindow'ı açın.
Araç penceresinde araç çubuğunda menü denetleyicisi görüntülenir.
Üç olası komutu görmek için menü denetleyicisinin sağ tarafındaki oka tıklayın.
Bir komuta tıkladığınızda menü denetleyicisinin başlığının bu komutu görüntüleyecek şekilde değiştiğine dikkat edin. Sonraki bölümde, bu komutları etkinleştirmek için kodu ekleyeceğiz.
Menü denetleyicisi komutlarını uygulama
TWTestCommandPackageGuids.cs dosyasında, mevcut komut kimliklerinden sonra üç menü öğeleriniz için komut kimlikleri ekleyin.
public const int cmdidMCItem1 = 0x130; public const int cmdidMCItem2 = 0x131; public const int cmdidMCItem3 = 0x132;
TWTestCommand.cs dosyasında sınıfın en üstüne
TWTestCommand
aşağıdaki kodu ekleyin.private int currentMCCommand; // The currently selected menu controller command
TWTestCommand oluşturucusunda, yöntemine yapılan son çağrıdan
AddCommand
sonra, her komutun olaylarını aynı işleyiciler aracılığıyla yönlendirmek için kod ekleyin.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; } }
Seçili komutu işaretli olarak işaretlemek için TWTestCommand sınıfına bir olay işleyicisi ekleyin.
private void OnMCItemQueryStatus(object sender, EventArgs e) { OleMenuCommand mc = sender as OleMenuCommand; if (null != mc) { mc.Checked = (mc.CommandID.ID == this.currentMCCommand); } }
Kullanıcı menü denetleyicisinde bir komut seçtiğinde MessageBox görüntüleyen bir olay işleyicisi ekleyin:
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); } }
Menü denetleyicisini test etme
Projeyi derleyin ve hata ayıklamaya başlayın. Deneysel örneği görmeniz gerekir.
Görünüm / Diğer Windows menüsünde Test AracıWindow'unu açın.
Menü denetleyicisi araç penceresinde araç çubuğunda görünür ve MC Item 1'i görüntüler.
Okun sol tarafındaki menü denetleyicisi düğmesine tıklayın.
İlki seçili olan ve simgesinin çevresinde vurgu kutusu bulunan üç öğe görmeniz gerekir. MC Item 3'e tıklayın.
Menü denetleyicisi Öğe 3'i seçtiniz iletisini içeren bir iletişim kutusu görüntülenir. İletinin menü denetleyicisi düğmesindeki metne karşılık geldiğini unutmayın. Menü denetleyicisi düğmesi artık MC Item 3'i görüntüler.