Почему я потерял фокус ввода в визуальной студии 2005/2008 - PullRequest
2 голосов
/ 23 октября 2010

Я написал надстройку для Visual Studio 2005/2008.Появится окно с некоторыми элементами управления для редактирования в качестве дочерних окон.Но если открыть VS

  1. с документом, а затем открыть мою надстройку, эти дочерние элементы управления редактирования потеряют фокус ввода при вводе Tab / Delete / Backsapace / Ctrl-C и т. Д.
  2. без какого-либо документа, а затем откройте мою надстройку, все в порядке.

Я думаю, что нашел причину.Если я удаляю привязку команды в VS, такую ​​как привязка команды Edit.InsertTab с помощью Tab, то при вводе Tab в моей надстройке фокус ввода не будет потерян.

И я попытался заменить своюОкно надстройки с модальным диалогом, для меня это удивительно, фокус ввода не будет потерян.

Я хочу знать, почему.И я не хочу использовать диалог.Кто-нибудь может сказать мне, как решить это.Спасибо.

1 Ответ

3 голосов
/ 23 октября 2010

Причина заключается в очень сложном способе ввода с клавиатуры в Visual Studio.

Цикл сообщений Visual Studio отдает первый приоритет сообщениям Windows (исключая буквенно-цифровой ввод) командам Visual Studio.Он вызовет цепочку IOleCommandTarget для активного IVsTextView.Упомянутые вами ключи специально обрабатываются частями редактора и, следовательно, имеют приоритет, обрабатывают сообщение и приводят к потере фокуса ввода.

Чтобы обойти это, нужно добавить экземпляр IOleCommandTarget в целевую цепочку команд OLE IVsTextView для активного представления.Когда ваше окно активно, вы можете перехватить данные ключи, пометить их как отключенные, и тогда они будут перенаправлены в ваше окно.

Я бы хотел привести здесь небольшой фрагмент кода, но, к сожалению, нет небольшого фрагмента кода, который бы адекватно демонстрировал это решение.Вместо этого я укажу вам тот же прием, который использовался в моем эмуляторе Vim для Visual Studio.

...