От VS2008 VSPackage, как мне получать уведомления при изменении положения каретки?

Я хотел бы получать уведомления всякий раз, когда позиция каретки изменяется в активном текстовом представлении. Единственное, что EnvDTE предлагает, это событие LineChanged, которое, конечно, не возникает при перемещении каретки влево или вправо в пределах одной и той же линии.

Я понимаю, что расширяемость редактора VS2010 позволяет вам делать это без проблем, но мне нужно решение, обратно совместимое с VS2008.

2 ответа

Решение

Я нашел решение. Решение состоит в том, чтобы создать IOleCommandTarget и зарегистрировать его в IVsTextView (см. Последние два бита кода в этом сообщении в блоге (на иврите)). Затем каждый раз, когда запускается команда, я проверяю, изменилась ли позиция каретки. Смотрите также: этот пост в блоге - Как перехватить нажатие клавиш в текстовом редакторе Visual Studio

Вы видели это: события DTE2 не запускаются

Вы должны сохранить локальный экземпляр объекта Events, иначе событие не сработает (я полагаю, потому что поддерживаемый COM объект Events вышел из области видимости и был GC'd):

public class MyVSPackage
{ 
   TextEditorEvents _textEditorEvents;

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

        _textEditorEvents.LineChanged += (point, endPoint, hint) => //Do something here
   }
}
Другие вопросы по тегам