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.
VSPackage'da komut uygulamak için aşağıdaki görevleri gerçekleştirmeniz gerekir:
.vsct dosyasında bir komut grubu ayarlayın ve komutu buna ekleyin. Daha fazla bilgi için bkz. Visual Studio komut tablosu (.vsct) dosyaları.
Komutu Visual Studio'ya kaydedin.
komutunu uygulayın.
Aşağıdaki bölümlerde komutları kaydetme ve uygulama açıklanmaktadır.
Visual Studio ile komutları kaydetme
Komutunuzun bir menüde görünmesi gerekiyorsa, VSPackage'ınıza ProvideMenuResourceAttribute öğesini eklemeniz ve menünün adı veya kaynak kimliğini bir değer olarak kullanmanız gerekir.
[ProvideMenuResource("Menus.ctmenu", 1)]
public sealed class MyPackage : Package
{
// ...
}
Ayrıca OleMenuCommandService ile komutu kaydetmeniz gerekir. VSPackage GetService'den türetilmişse Package yöntemini kullanarak bu hizmeti alabilirsiniz.
OleMenuCommandService mcs = GetService(typeof(IMenuCommandService)) as OleMenuCommandService;
if (mcs is not null)
{
// Create the command for the menu item.
CommandID menuCommandID = new CommandID(guidCommandGroup, myCommandID);
MenuCommand menuItem = new MenuCommand(MenuItemCallback, menuCommandID);
mcs.AddCommand(menuItem);
}
Komutları uygulama
Komutları uygulamanın birkaç yolu vardır. Her zaman aynı şekilde ve aynı menüde görünen bir komut olan statik menü komutu istiyorsanız, önceki bölümdeki örneklerde gösterildiği gibi komutunu kullanarak MenuCommand oluşturun. Statik komut oluşturmak için, komutu yürütmekle sorumlu olan bir olay işleyicisi sağlamanız gerekir. Komut her zaman etkin ve görünür olduğundan, durumunu Visual Studio'ya sağlamanız gerekmez. Belirli koşullara bağlı olarak bir komutun durumunu değiştirmek istiyorsanız, komutu sınıfın OleMenuCommand bir örneği olarak oluşturabilir ve oluşturucusunda komutu yürütmek için bir olay işleyicisi ve komutun durumu değiştiğinde Visual Studio'ya bildirim göndermek için bir QueryStatus işleyici sağlayabilirsiniz. Bir komut sınıfının parçası olarak da uygulayabilirsiniz IOleCommandTarget veya bir projenin parçası olarak komut sağlıyorsanız uygulayabilirsiniz IVsHierarchy . İki arabirim ve sınıfın OleMenuCommand tümü, Visual Studio'ya bir komutun durumundaki değişikliği bildiren yöntemlere ve komutun yürütülmesini sağlayan diğer yöntemlere sahiptir.
Komut hizmetine bir komut eklendiğinde, komut zincirinden biri haline gelir. Komutun durum bildirimini ve yürütme yöntemlerini uyguladığınızda, yalnızca söz konusu komutu sağlamaya ve diğer tüm servis taleplerini zincirdeki diğer komutlara geçirmeye dikkat edin. komutunu geçiremezseniz (genellikle döndürerek OLECMDERR_E_NOTSUPPORTED), Visual Studio düzgün çalışmayı durdurabilir.
QueryStatus yöntemleri
yöntemini veya QueryStatus yöntemini uyguluyorsanız, komutun QueryStatusCommand ait olduğu komut kümesinin GUID değerini ve komutun kimliğini denetleyin. Şu yönergeleri izleyin:
GUID tanınmıyorsa, her iki yöntemden birini uygulamanız döndürmelidir OLECMDERR_E_UNKNOWNGROUP.
Her iki yöntemden birini uygulamanız GUID'yi tanır ancak komutunu uygulamadıysa, yöntemi döndürmelidir OLECMDERR_E_NOTSUPPORTED.
İki yöntemden birini uygulamanız hem GUID'yi hem de komutu tanırsa, yöntemin aşağıdaki
prgCmdsbayrakları kullanarak her komutun komut bayrakları alanını (parametresindeOLECMDF) ayarlaması gerekir:OLECMDF_SUPPORTED: Komut destekleniyor.OLECMDF_INVISIBLE: Komut görünür olmamalıdır.OLECMDF_LATCHED: Komut açık durumdadır ve denetlenmiş gibi görünür.OLECMDF_ENABLED: Komut etkindir.OLECMDF_DEFHIDEONCTXTMENU: Komut bir kısayol menüsünde görünürse gizlenmelidir.OLECMDF_NINCHED: Komut bir menü denetleyicisidir ve etkin değildir, ancak açılan menü listesi boş değildir ve hala kullanılabilir durumdadır. (Bu bayrak nadiren kullanılır.)
Komut bayrağıyla
TextChangesdosyasında tanımlanmışsa aşağıdaki parametreleri ayarlayın:rgwzparametresininpCmdTextöğesini komutun yeni metnine ayarlayın.cwActualparametresininpCmdTextöğesini komut dizesinin boyutuna ayarlayın.
Ayrıca, komutunuz otomasyon işlevlerini işlemek için özel olarak tasarlanmadığı sürece geçerli bağlamın bir otomasyon işlevi olmadığından emin olun.
Belirli bir komutu desteklediğinizi belirtmek için döndürebilirsiniz S_OK. Diğer tüm komutlar için OLECMDERR_E_NOTSUPPORTED döndürün.
Aşağıdaki örnekte yöntemi önce bağlamın QueryStatus bir otomasyon işlevi olmadığından emin olur, ardından doğru komut kümesi GUID'sini ve komut kimliğini bulur. Komutun kendisi etkinleştirilecek ve desteklenecek şekilde ayarlanmıştır. Başka komut desteklenmez.
public int QueryStatus(ref Guid pguidCmdGroup, uint cCmds, OLECMD[] prgCmds, IntPtr pCmdText)
{
if (!VsShellUtilities.IsInAutomationFunction(m_provider.ServiceProvider))
{
if (pguidCmdGroup == VSConstants.VSStd2K && cCmds > 0)
{
// make the Right command visible
if ((uint)prgCmds[0].cmdID == (uint)VSConstants.VSStd2KCmdID.RIGHT)
{
prgCmds[0].cmdf = (int)Microsoft.VisualStudio.OLE.Interop.Constants.MSOCMDF_ENABLED | (int)Microsoft.VisualStudio.OLE.Interop.Constants.MSOCMDF_SUPPORTED;
return VSConstants.S_OK;
}
}
}
return Constants.OLECMDERR_E_NOTSUPPORTED;
}
Yürütme yöntemleri
Exec yönteminin uygulanması, QueryStatus yönteminin uygulanmasına benzer. İlk olarak, bağlamın bir otomasyon işlevi olmadığından emin olun. Ardından hem GUID hem de komut kimliği için test edin. GUID veya komut kimliği tanınmıyorsa OLECMDERR_E_NOTSUPPORTED değerini döndür.
Komutu işlemek için yürütün ve yürütme başarılı olursa S_OK döndürün. Komutunuz hata algılama ve bildirimden sorumludur; bu nedenle, yürütme başarısız olursa bir hata kodu döndürür. Aşağıdaki örnekte yürütme yönteminin nasıl uygulanması gerektiği gösterilmektedir.
public int Exec(ref Guid pguidCmdGroup, uint nCmdID, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
{
if (!VsShellUtilities.IsInAutomationFunction(m_provider.ServiceProvider))
{
if (pguidCmdGroup == VSConstants.GUID_VSStandardCommandSet97)
{
if (nCmdID == (uint)VSConstants.VSStd2KCmdID.RIGHT)
{
// execute the command
return VSConstants.S_OK;
}
}
}
return Constants.OLECMDERR_E_NOTSUPPORTED;
}