从VS2008 vpackage,我如何得到通知每当插入符号的位置改变

本文关键字:插入 符号 改变 位置 通知 vpackage VS2008 何得 | 更新日期: 2023-09-27 18:13:31

我想在活动文本视图中插入符号位置更改时获得通知。EnvDTE似乎提供的唯一东西是linechange事件,当在同一行内向左或向右移动插入符号时,当然不会引发该事件。

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

从VS2008 vpackage,我如何得到通知每当插入符号的位置改变

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

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

public class MyVSPackage
{ 
   TextEditorEvents _textEditorEvents;
   public MyVSPackage()
   {
        _textEditorEvents = DTE.Events.TextEditorEvents;
        _textEditorEvents.LineChanged += (point, endPoint, hint) => //Do something here
   }
}

我找到了一个解决方案。解决方案是创建一个IOleCommandTarget并在IVsTextView上注册它(参见这篇博客文章的最后两段代码)。然后,每次执行命令时,检查插入符号的位置是否发生了变化。参见:这篇博文-如何拦截Visual Studio文本编辑器中的按键