От 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
}
}