2013-05-15 49 views
6

Chcę otrzymywać powiadomienia za każdym razem, gdy zmieni się pozycja karetki w widoku aktywnego tekstu. Wydaje się, że EnvDTE oferuje tylko the LineChanged event, która oczywiście nie jest podnoszona podczas przesuwania karetki w lewo lub w prawo w obrębie tej samej linii.Z VSPackage VS2008, w jaki sposób otrzymam powiadomienie, gdy zmieni się pozycja kurtyny?

Zdaję sobie sprawę, że Rozszerzalność edytora VS2010 pozwala na to bez potu, ale potrzebuję rozwiązania, które będzie kompatybilne wstecz z VS2008.

+0

Czy dostępne jest odwołanie do IVsTextView? –

+0

Tak, i zauważyłem, że mogę uzyskać od niego pozycję opiekuna/selekcji za pomocą '.GetSelection (...)', ale nie mogę znaleźć zdarzenia, które powiadomi mnie, gdy zostanie zmienione. –

+0

Nie sądzę, że masz dostępne te informacje w VS2008. Jedynym zdarzeniem, które można zdobyć, jest OnCaretChangeLine z IVsTextViewEvents. Będziesz musiał zmierzyć pozycję karetki między dwoma zdarzeniami w czasie. –

Odpowiedz

1

Widzieliście to: DTE2 events don't fire

Trzeba zachować lokalnego wystąpienie Zdarzenia obiektu, w przeciwnym razie pożaru przyzwyczajenie wydarzenie (zakładam, ponieważ COM backed Wydarzenia sprzeciw wyszedł z zakresem i był GC'd) :

public class MyVSPackage 
{ 
    TextEditorEvents _textEditorEvents; 

    public MyVSPackage() 
    { 
     _textEditorEvents = DTE.Events.TextEditorEvents; 

     _textEditorEvents.LineChanged += (point, endPoint, hint) => //Do something here 
    } 
} 
+0

Tak, jestem tego świadomy - ale jak pisałem w swoim oryginalnym wpisie, LineChanged występuje tylko wtedy, gdy linia się zmieniła, a nie kiedy kolumna się zmieniła. W każdym razie dzięki! –

+0

Przepraszam za to. Jeśli rzucisz dte.Events na EnvDTE80.Events2, otrzymasz dostęp do TextDocumentKeyPressEvents, który ma zdarzenie AfterKeyPress. Czy próbowałeś tego? '(dte.Events as Events2) .TextDocumentKeyPressEvents.AfterKeyPress + = (naciśnięcie klawisza, wybór, zakończenie) =>' –

+0

Niestety, to też nie działa, ponieważ funkcja AfterKeyPress nie uruchamia wszystkich naciśnięć klawiszy (w szczególności klawiszy strzałek nie uruchamiaj go, aby wystrzelić, ponieważ są one przetwarzane wcześniej w wewnętrznym kodzie obsługi poleceń Visual Studio). –