当插入符号位置在Document中发生变化时触发事件?

时间:2013-06-03 21:05:56

标签: visual-studio-extensions envdte

在我的visual Studio 2012扩展程序中,我使用

获取了有效EnvDTE.Document
windowEvents = dte2.Events.WindowEvents;
windowEvents.WindowActivated += WindowActivated;

private void WindowActivated(Window gotfocus, Window lostfocus)
{
    if (gotfocus.Type == vsWindowType.vsWindowTypeDocument)
    {
        ProcessDocument(gotfocus.Document);
    }            
}     

我想知道文档中插入符号位置何时发生变化,但我找不到合适的附加事件。我发现了一些像textEditorEvents.LineChanged这样的事件,但这只会在文本发生变化时触发。我需要处理的情况是插入符号位置发生变化,但是没有更改为文本。

实现这一目标的最佳方法是什么?这样的Document事件是否存在?

1 个答案:

答案 0 :(得分:0)

抱怨......我希望有更直接的方式来做你想做的事。

对于事件,我在EnvDTE界面中没有任何知道这样做的事情。用于查看插入符号明确定位的核心编辑器界面是ITextCaret.PositionChanged。连接一个的方法是导出一个IWpfTextViewCreationListener,当你调用TextViewCreated方法时,你将获得视图,其上的Caret属性将包含该事件。然后,您可以正常地附加到该事件,并使用它做您想做的事。

通常情况下,您可能会遇到一些奇怪的事情:首先,您不一定知道插入符导航是由用户还是通过某个自动系统完成的。其次,不要指望重复导航也能正常工作,因为如果我点击单元测试并且这就是我已经做过的事情,就不会有插入符号的插入符号。

您可能仍然会更好地了解您关心的特定测试运行者是否允许可扩展性。许多跑步者都是“可插拔的”,适配器告诉跑步者源代码在哪里。许多跑步者的许多适配器都是开源的,因此进行简单的修复可能会带来更好的长期体验。