2013-05-15 60 views
6

每當在活動文本視圖中更改插入符號位置時,我都會收到通知。 EnvDTE似乎提供的唯一東西是the LineChanged event,當在同一行中向左或向右移動插入符號時,這當然不會升起。從VS2008 VSPackage中,當插入符號位置發生變化時,我該如何得到通知?

我意識到VS2010的編輯器擴展性可以讓你在沒有汗水的情況下做到這一點,但我需要一個向下兼容VS2008的解決方案。

+0

您是否有可用的IVsTextView參考? –

+0

是的,我注意到我可以使用'.GetSelection(...)'從它得到插入符號/選擇位置,但是找不到一個當它改變時通知我的事件。 –

+0

我不認爲你在VS2008中有這些信息。唯一可以得到的脫字符串事件是來自IVsTextViewEvents的OnCaretChangeLine。您將不得不在兩個事件之間測量插入符號的位置。 –

回答

1

你見過這樣的:DTE2 events don't fire

你必須保持活動的本地實例對象,否則不會事件火(我假設,因爲COM支持活動對象走出的範圍,是GC'd) :

public class MyVSPackage 
{ 
    TextEditorEvents _textEditorEvents; 

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

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

是的,我意識到這一點 - 但正如我在原始文章中所寫的,LineChanged只發生在Line改變時,而不是Column改變時發生。不管怎麼說,多謝拉! –

+0

對不起。如果將dte.Events投射到EnvDTE80.Events2,則可以訪問具有AfterKeyPress事件的TextDocumentKeyPressEvents。你嘗試過嗎? '(dte.Events as Events2).TextDocumentKeyPressEvents.AfterKeyPress + =(keypress,selection,completion)=>' –

+0

不幸的是,這也不起作用,因爲AfterKeyPress沒有觸發所有按鍵(特別是方向鍵不要觸發它,因爲它們是在Visual Studio的內部命令處理代碼中進行處理的)。 –

相關問題