从VS2008 VSPackage,如何在插入符号位置发生变化时收到通知?

时间:2013-05-15 06:03:29

标签: c# visual-studio-2008 vsx envdte

我想在活动文本视图中更改插入符号位置时收到通知。 EnvDTE似乎唯一提供的是the LineChanged event,当在同一行内向左或向右移动插入符时,当然不会引发这种情况。

我意识到VS2010的编辑器可扩展性让你可以毫不费力地做到这一点,但我需要一个向后兼容VS2008的解决方案。

2 个答案:

答案 0 :(得分:1)

你见过这个:DTE2 events don't fire

你必须保留Events对象的本地实例,否则事件不会触发(我假设因为COM支持的Events对象超出了范围而且是GC'd):

public class MyVSPackage
{ 
   TextEditorEvents _textEditorEvents;

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

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

答案 1 :(得分:0)

我找到了解决方案。解决方案是创建一个IOleCommandTarget并在IVsTextView上注册它(参见代码in this blog post (in Herbrew)的最后两位)。然后,每次触发命令时,我都会检查插入符号位置是否已更改。另见:this blog post - How to intercept key presses in the Visual Studio text editor