첫 번째 Visual Studio (2015 커뮤니티) 명령 메뉴를 개발 중이며 IEditorOperations
에 액세스하여 텍스트를 삭제하고 백 스페이스 등을 보내려고합니다. 그러나 방법을 잘 모르겠습니다. 내가 할 수있는 :IVsTextView에서 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 커맨드 세트 id 등등에 바인딩 명령 서비스를 만드는 개인 ctor와 나를 위해 템플릿을 생성합니다. Initialize
메서드를 재정의하고, 속성을 잔뜩.
아이디어가 있으십니까?
편집 : 세르게이의 도움을받은 후, 나는 조금 더 발전 할 수있었습니다. 하지만 이제 IEditorOperationsFactoryService
을 얻으려고하면 null이되고 다른 모든 값은 유효합니다.
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