Visual Studio — Перемещать курсор без потери фокуса

#c# #visual-studio #vs-extensibility #vspackage

#c# #visual-studio #vs-расширяемость #vspackage

Вопрос:

В моем пакете есть несколько окон инструментов, и я хотел бы отображать определенный момент в документе, когда пользователь выполняет некоторые действия в окнах инструментов.

Я попробовал следующий код:

 // Perform selection
TextSelection selection = activeDocument.Selection as TextSelection;
selection.MoveToAbsoluteOffset(offset, false);

// Show the currently selected line at the top of the editor if possible
TextPoint tp = (TextPoint)selection.TopPoint;
tp.TryToShow(vsPaneShowHow.vsPaneShowTop, null);
  

Это делает то, что я хочу, но, к сожалению, фокусируется на редакторе кода Visual Studio, отвлекая его от моего окна инструментов. Это нехорошо, если пользователь вводит текст в окне моего инструмента и внезапно перемещает фокус на редактор.

Есть ли другой способ сделать это без потери фокуса?

Комментарии:

1. Вы пробовали просто переместить фокус назад? Сохраните ActiveWindow перед кодом, вызовите его метод Activate() после.

2. Это сделало свое дело. Я не знаю, почему я об этом не подумал! Спасибо.

Ответ №1:

 // Store active window before selecting
Window activeWindow = applicationObject.ActiveWindow;

// Perform selection
TextSelection selection = activeDocument.Selection as TextSelection;
selection.MoveToAbsoluteOffset(offset, false);

// Show the currently selected line at the top of the editor if possible
TextPoint tp = (TextPoint)selection.TopPoint;
tp.TryToShow(vsPaneShowHow.vsPaneShowTop, null);

// Restore focus to active window
activeWindow.Activate();