Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu izlenecek yol, Menüye alt menü ekleme başlığı altında yer alan gösterimleri ve bir alt menüye dinamik listenin nasıl ekleneceğini gösterir. Dinamik liste, En Son Kullanılanlar (MRU) listesi oluşturmanın temelini oluşturur.
Dinamik menü listesi, menüde yer tutucuyla başlar. Menü her gösterildiğinde, Visual Studio tümleşik geliştirme ortamı (IDE) VSPackage'dan yer tutucuda gösterilmesi gereken tüm komutları ister. Dinamik liste, menünün herhangi bir yerinde yer alabilir. Ancak dinamik listeler genellikle alt menülerde veya menülerin alt kısımlarında kendi kendilerine depolanır ve görüntülenir. Bu tasarım desenlerini kullanarak, menüdeki diğer komutların konumunu etkilemeden genişletmek ve daraltmak için dinamik komut listesini etkinleştirirsiniz. Bu kılavuzda, dinamik MRU listesi var olan bir alt menünün alt kısmında, alt menünün geri kalanından bir satırla ayrılmış olarak görüntülenir.
Teknik olarak, dinamik liste bir araç çubuğuna da uygulanabilir. Ancak, kullanıcı bunu değiştirmek için belirli adımlar atmadığı sürece araç çubuğunun değişmeden kalması gerektiğinden bu kullanımı önerilmez.
Bu izlenecek yol, biri her seçildiğinde (seçilen öğe listenin en üstüne taşınır) sıralarını değiştiren dört öğeden oluşan bir MRU listesi oluşturur.
Menüler ve .vsct dosyaları hakkında daha fazla bilgi için bkz . Komutlar, menüler ve araç çubukları.
Önkoşullar
Bu kılavuzu izlemek için Visual Studio SDK'sını yüklemeniz gerekir. Daha fazla bilgi için bkz . Visual Studio SDK'sı.
Uzantı oluşturma
Aşağıdaki yordamlarda değiştirilen alt menüyü oluşturmak için Menüye alt menü ekleme makalesindeki yordamları izleyin.
Bu kılavuzdaki yordamlarda VSPackage
TestCommandadının Visual Studio menü çubuğuna menü ekleme bölümünde kullanılan ad olduğu varsayılır.
Dinamik öğe listesi oluştur komutu
TestCommandPackage.vsct dosyasını açın.
Symbolsbölümünde guidTestCommandPackageCmdSetGuidSymboladlı düğümde, grup ve komutu içinMRUListGroupsimgeyicmdidMRUListaşağıdaki gibi ekleyin.<IDSymbol name="MRUListGroup" value="0x1200"/> <IDSymbol name="cmdidMRUList" value="0x0200"/>Groupsbölümünde, bildirilen grubu var olan grup girdilerinden sonra ekleyin.<Group guid="guidTestCommandPackageCmdSet" id="MRUListGroup" priority="0x0100"> <Parent guid="guidTestCommandPackageCmdSet" id="SubMenu"/> </Group>Buttonsbölümünde, var olan düğme girdilerinden sonra yeni bildirilen komutu temsil eden bir düğüm ekleyin.<Button guid="guidTestCommandPackageCmdSet" id="cmdidMRUList" type="Button" priority="0x0100"> <Parent guid="guidTestCommandPackageCmdSet" id="MRUListGroup" /> <CommandFlag>DynamicItemStart</CommandFlag> <Strings> <CommandName>cmdidMRUList</CommandName> <ButtonText>MRU Placeholder</ButtonText> </Strings> </Button>DynamicItemStartbayrağı komutun dinamik olarak oluşturulmasını sağlar.Yeni komutun görüntülenmesini test etmek için projeyi derleyin ve hata ayıklamayı başlatın.
TestMenu menüsünde, yeni MRU Yer Tutucusu komutunu görüntülemek için yeni alt menü olan Alt Menü'ye tıklayın. Sonraki yordamda dinamik bir MRU komut listesi uygulandıktan sonra, alt menü her açıldığında bu komut etiketi bu listeyle değiştirilir.
MRU Listesini Doldurma
TestCommandPackageGuids.cs dosyasında, sınıf tanımındaki mevcut komut kimliklerinin
TestCommandPackageGuidsarkasına aşağıdaki satırları ekleyin.public const string guidTestCommandPackageCmdSet = "00000000-0000-0000-0000-00000000"; // get the GUID from the .vsct file public const uint cmdidMRUList = 0x200;TestCommand.cs dosyasına aşağıdaki using deyimini ekleyin.
using System.Collections;Son AddCommand çağrısından sonra TestCommand oluşturucusunda aşağıdaki kodu ekleyin.
InitMRUMenudaha sonra tanımlanacakthis.InitMRUMenu(commandService);TestCommand sınıfına aşağıdaki kodu ekleyin. Bu kod, MRU listesinde gösterilecek öğeleri temsil eden dizelerin listesini başlatır.
private int numMRUItems = 4; private int baseMRUID = (int)TestCommandPackageGuids.cmdidMRUList; private ArrayList mruList; private void InitializeMRUList() { if (null == this.mruList) { this.mruList = new ArrayList(); if (null != this.mruList) { for (int i = 0; i < this.numMRUItems; i++) { this.mruList.Add(string.Format(CultureInfo.CurrentCulture, "Item {0}", i + 1)); } } } }yönteminden
InitializeMRUListsonra yöntemini ekleyinInitMRUMenu. Bu, MRU liste menü komutlarını başlatır.private void InitMRUMenu(OleMenuCommandService mcs) { InitializeMRUList(); for (int i = 0; i < this.numMRUItems; i++) { var cmdID = new CommandID( new Guid(TestCommandPackageGuids.guidTestCommandPackageCmdSet), this.baseMRUID + i); var mc = new OleMenuCommand( new EventHandler(OnMRUExec), cmdID); mc.BeforeQueryStatus += new EventHandler(OnMRUQueryStatus); mcs.AddCommand(mc); } }MRU listesindeki her olası öğe için bir menü komut nesnesi oluşturmanız gerekir. IDE, başka öğe kalmayıncaya kadar MRU listesindeki her öğe için yöntemini çağırır
OnMRUQueryStatus. Yönetilen kodda, IDE'nin başka öğe olmadığını bilmesinin tek yolu, önce tüm olası öğeleri oluşturmaktır. İsterseniz, menü komutu oluşturulduktan sonra kullanarakmc.Visible = false;ek öğeleri ilk başta görünür değil olarak işaretleyebilirsiniz. Bu öğeler daha sonra yöntemi kullanılarakmc.Visible = true;OnMRUQueryStatusgörünür hale getirilebilir.yönteminden
InitMRUMenusonra aşağıdakiOnMRUQueryStatusyöntemi ekleyin. Bu, her MRU öğesinin metnini ayarlayan işleyicidir.private void OnMRUQueryStatus(object sender, EventArgs e) { OleMenuCommand menuCommand = sender as OleMenuCommand; if (null != menuCommand) { int MRUItemIndex = menuCommand.CommandID.ID - this.baseMRUID; if (MRUItemIndex >= 0 && MRUItemIndex < this.mruList.Count) { menuCommand.Text = this.mruList[MRUItemIndex] as string; } } }yönteminden
OnMRUQueryStatussonra aşağıdakiOnMRUExecyöntemi ekleyin. Bu, MRU öğesini seçme işleyicisidir. Bu yöntem, seçili öğeyi listenin en üstüne taşır ve seçili öğeyi bir ileti kutusunda görüntüler.private void OnMRUExec(object sender, EventArgs e) { var menuCommand = sender as OleMenuCommand; if (null != menuCommand) { int MRUItemIndex = menuCommand.CommandID.ID - this.baseMRUID; if (MRUItemIndex >= 0 && MRUItemIndex < this.mruList.Count) { string selection = this.mruList[MRUItemIndex] as string; for (int i = MRUItemIndex; i > 0; i--) { this.mruList[i] = this.mruList[i - 1]; } this.mruList[0] = selection; System.Windows.Forms.MessageBox.Show( string.Format(CultureInfo.CurrentCulture, "Selected {0}", selection)); } } }
MRU listesini test etme
Projeyi derleyin ve hata ayıklamaya başlayın.
TestMenu menüsünde Test Komutunu Çağır'a tıklayın. Bunu yaptığınızda, komutun seçili olduğunu belirten bir ileti kutusu görüntülenir.
Dekont
Bu adım, VSPackage'ı MRU listesini yüklemeye ve doğru şekilde görüntülemeye zorlamak için gereklidir. Bu adımı atlarsanız MRU listesi görüntülenmez.
Test Menüsü menüsünde Alt Menü'ye tıklayın. Alt menünün sonunda, ayırıcının altında dört öğeden oluşan bir liste görüntülenir. Öğe 3'e tıkladığınızda, bir ileti kutusu görünmelidir ve Seçili Öğe 3 metnini görüntülemelidir. (Dört öğenin listesi görüntülenmiyorsa, önceki adımda yer alan yönergeleri izlediğinize emin olun.)
Alt menüyü yeniden açın. Öğe 3'ün artık listenin en üstünde olduğuna ve diğer öğelerin bir konum aşağı gönderildiğine dikkat edin. Öğe 3'e yeniden tıklayın ve ileti kutusunda hala Seçili Öğe 3'in görüntülendiğine dikkat edin. Bu, metnin komut etiketiyle birlikte yeni konuma doğru şekilde taşındığını gösterir.