Я разрабатываю свое первое командное меню Visual Studio (2015 Community), и я пытаюсь получить доступ к IEditorOperations
, чтобы удалить текст, отправить назад и т. Д., Но я не уверен, как это сделать. Я могу сделать:Как получить IEditorOperations из IVsTextView?
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, создающим службу команд, привязывая его к идентификатору набора команд и т. д. Переопределенный метод Initialize
и набор свойств.
Любые идеи?
EDIT: После помощи Сергея мне удалось немного поучиться. Но теперь я получаю 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);
}
Общая версия работает по какой-то причине, но не-общий возвращает null. Благодаря! – vexe