3

在我的 Visual Studio 2012 扩展中,我正在使用EnvDTE.DocumentActive

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 事件是否存在?

4

1 回答 1

0

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

对于事件,我所知道的 EnvDTE 界面中没有任何内容可以执行此操作。用于查看插入符号何时显式定位的核心编辑器界面是ITextCaret.PositionChanged。您连接一个的方式是导出一个 IWpfTextViewCreationListener,当您调用 TextViewCreated 方法时,您将获得视图,并且其上的 Caret 属性将具有该事件。然后,您可以正常附加到事件并使用它做您想做的事情。

一般来说,使用这种方法可能会遇到一些奇怪的事情:首先,您不一定知道插入符号导航是由用户完成的还是通过某些自动化系统完成的。其次,不要指望重复导航也能起作用,因为如果我单击单元测试并且这就是我已经做过的,就不会拦截插入符号导航。

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

于 2013-06-18T05:33:08.693 回答