Ich entwickle mein erstes Visual Studio (2015 Community) Befehlsmenü und ich versuche, Zugriff auf IEditorOperations
zu erhalten, um Text zu löschen, Rücktaste usw. zu senden, aber ich bin mir nicht sicher, wie. Ich kann tun:Wie bekomme ich IEditorOperations von IVsTextView?
var Service = Provider.GetService(typeof(IEditorOperationsFactoryService)) as IEditorOperationsFactoryService;
Service.GetEditorOperations(???);
Ich bin nicht sicher, was in den ???
passieren, da ich keinen Zugang zu einem ITextView
statt, was ich habe, ist ein IVsTExtView
über:
IVsTextView View;
IVsTextManager Manager = (IVsTextManager)ServiceProvider.GetService(typeof(SVsTextManager));
int MustHaveFocus = 1;
Manager.GetActiveView(MustHaveFocus, null, out View);
Beim Erstellen Das Befehlsmenü, VS erzeugt eine Vorlage für mich mit einem privaten ctor, der den Befehlsdienst erstellt, ihn an die Befehlssatz-ID usw. bindet. Eine überschriebene Initialize
-Methode und eine Reihe von Eigenschaften.
Irgendwelche Ideen?
EDIT: Nach Hilfe von Sergey, gelang es mir, ein bisschen weiter zu kommen. Aber jetzt bekomme ich eine Null, wenn ich versuche, die IEditorOperationsFactoryService
zu bekommen, alle anderen Werte sind gültig.
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);
}
Die generische Version funktioniert aus irgendeinem Grund, aber die nicht generische Version gibt null zurück. Vielen Dank! – vexe