#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();