每當在活動文本視圖中更改插入符號位置時,我都會收到通知。 EnvDTE似乎提供的唯一東西是the LineChanged event,當在同一行中向左或向右移動插入符號時,這當然不會升起。從VS2008 VSPackage中,當插入符號位置發生變化時,我該如何得到通知?
我意識到VS2010的編輯器擴展性可以讓你在沒有汗水的情況下做到這一點,但我需要一個向下兼容VS2008的解決方案。
每當在活動文本視圖中更改插入符號位置時,我都會收到通知。 EnvDTE似乎提供的唯一東西是the LineChanged event,當在同一行中向左或向右移動插入符號時,這當然不會升起。從VS2008 VSPackage中,當插入符號位置發生變化時,我該如何得到通知?
我意識到VS2010的編輯器擴展性可以讓你在沒有汗水的情況下做到這一點,但我需要一個向下兼容VS2008的解決方案。
我找到了解決方法。解決方案是創建一個IOleCommandTarget並將其註冊到IVsTextView上(請參閱代碼in this blog post (in Herbrew)的最後兩位)。然後,每次發出命令時,我都會檢查插入符的位置是否發生了變化。另請參閱:this blog post - How to intercept key presses in the Visual Studio text editor
爲什麼downvote? –
你見過這樣的: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
}
}
是的,我意識到這一點 - 但正如我在原始文章中所寫的,LineChanged只發生在Line改變時,而不是Column改變時發生。不管怎麼說,多謝拉! –
對不起。如果將dte.Events投射到EnvDTE80.Events2,則可以訪問具有AfterKeyPress事件的TextDocumentKeyPressEvents。你嘗試過嗎? '(dte.Events as Events2).TextDocumentKeyPressEvents.AfterKeyPress + =(keypress,selection,completion)=>' –
不幸的是,這也不起作用,因爲AfterKeyPress沒有觸發所有按鍵(特別是方向鍵不要觸發它,因爲它們是在Visual Studio的內部命令處理代碼中進行處理的)。 –
您是否有可用的IVsTextView參考? –
是的,我注意到我可以使用'.GetSelection(...)'從它得到插入符號/選擇位置,但是找不到一個當它改變時通知我的事件。 –
我不認爲你在VS2008中有這些信息。唯一可以得到的脫字符串事件是來自IVsTextViewEvents的OnCaretChangeLine。您將不得不在兩個事件之間測量插入符號的位置。 –