私は最初の Visual Studio (2015 Community) コマンド メニューを開発しておりIEditorOperations
、テキストの削除、バックスペースの送信などにアクセスしようとしていますが、方法がわかりません。できます:
var Service = Provider.GetService(typeof(IEditorOperationsFactoryService)) as IEditorOperationsFactoryService;
Service.GetEditorOperations(???);
???
にアクセスできないため、何を渡せばよいかわかりません。ITextView
代わりに、私が持っているのはIVsTExtView
ビアです。
IVsTextView View;
IVsTextManager Manager = (IVsTextManager)ServiceProvider.GetService(typeof(SVsTextManager));
int MustHaveFocus = 1;
Manager.GetActiveView(MustHaveFocus, null, out View);
コマンドメニューを作成するとき、VSはコマンドサービスを作成するプライベートctorを使用してテンプレートを生成し、それをコマンドセットIDなどにバインドします。オーバーライドされたInitialize
メソッドと一連のプロパティ。
何か案は?
編集: Sergey の助けを借りて、もう少し先に進むことができました。しかし、取得しようとするとnullが返されIEditorOperationsFactoryService
、他のすべての値は有効です。
static IEditorOperations GetEditorService(IServiceProvider Provider, IVsTextView VsView)
{
IEditorOperations Result;
try
{
var Model = (IComponentModel)Provider.GetService(typeof(SComponentModel));
var Editor = (IEditorOperationsFactoryService)Provider.GetService(typeof(IEditorOperationsFactoryService)); // returns null
var Adaptor = Model.GetService<IVsEditorAdaptersFactoryService>();
IWpfTextView TextView = Adaptor.GetWpfTextView(VsView);
Result = Editor.GetEditorOperations(TextView);
}
catch (Exception e)
{
System.Windows.Forms.MessageBox.Show(e.ToString());
Result = null;
}
return (Result);
}