У меня такая точная проблема https://social.msdn.microsoft.com/Forums/vstudio/en-US/e417e686-032c-4324-b778-fef66c7687cd/excel-customtaskpane-with-webbrowser-control-keyboardfocus-issues?forum=vsto
Также упоминается здесь https://connect.microsoft.com/VisualStudio/feedback/details/521465/the-focus-issue-between-excel-cells-and-excel-customtaskpane-with-webbrowser-control
Я пишу плагин Excel 2010 с помощью Visual Studio Professional 2013. Я создал простую CustomTaskPane с дочерним элементом System.Windows.Forms.WebBrowser. Плагин работает очень хорошо, и я могу перемещаться внутри веб-браузера щелчком и изменять состояние флажков.
Когда я нажимаю на текстовое поле ввода, я получаю фокус, и я вижу, что курсор мигает, но когда я начинаю вводить текст, он отправляется в Excel и записывается в ячейку вместо текстового поля внутри браузера.
Я добавляю пользовательскую область задач, когда лента загружается.
private void Ribbon_Load(object sender, RibbonUIEventArgs e)
{
TaskPaneView taskPaneView = new TaskPaneView();
Microsoft.Office.Tools.CustomTaskPane myTaskPane = Globals.ThisAddIn.CustomTaskPanes.Add(taskPaneView, "Title");
myTaskPane.Visible = true;
}
Когда я нажимаю на текстовое поле, то нажмите F6
, он работает правильно. Заголовок customtaskpane слегка затемняется, и текст помещается в текстовое поле.
Как я могу исправить эту проблему, чтобы при щелчке по текстовому полю ввода текст переместился в поле вместо Excel?
EDIT: Хорошо, я сделал еще несколько тестов.. Если я добавлю события в свой TaskPaneView для отслеживания ввода мыши и нажмите, они работают, но только если я удалю дочерний элемент веб-браузера. Значение веб-браузера каким-то образом блокирует эти события и не позволяет TaskPaneView понять, что у него есть фокус. Если бы я также добавил элемент управления текстовыми полями в TaskPaneView вместе с браузером, текстовое поле прекрасно работает, и TaskPaneView понимает, что он имеет фокус, а затем вводит текстовое поле внутри браузера, а затем начинает работу. Если я вызываю метод фокуса непосредственно в веб-браузере, TaskPaneView понимает, что он имеет фокус, и все работает отлично. Настолько ясно, что проблема не в том, что на клавиатуре, но вместо проблемы TaskPaneView не сказано, что она имеет фокус при щелчке браузера, поэтому нажатия клавиш идут в неправильную область. Если я смогу найти способ заставить TaskPaneView понять, что он должен фокусироваться, все должно работать.