2015-12-04 3 views
1

Я создал простую AddIn для MS Excel, но возникла проблема с пользовательской панелью задач.VSTO AddIn для Excel - Как предотвратить пользовательскую панель задач, теряющую фокус?

Управление пользовательской панелью задач написано в WPF, но всякий раз, когда пользователь пытается ввести некоторые данные в поле текстового поля в CTP, которое он ранее выбрал с помощью мыши, Excel ставит фокус и возвращает его в выбранную ячейку.

Могу ли я предотвратить такое поведение?

Решение, которое необходимо применить пользователю, это нажать кнопку «Esc» на клавиатуре, а затем он может снова выбрать элемент управления в CTP и записать на него.

То же самое происходит с элементами управления, которые имеют контекстные меню. Когда пользователь нажимает на элемент управления правой кнопкой мыши, контекстное меню в ближайшее время отображается, а фокус возвращается на рабочий лист Excel.

Если пользователь активно редактирует какую-либо ячейку, он не может выбрать ни один из элементов управления в CTP до завершения редактирования, но может получить доступ к кнопкам ленты.

Пожалуйста, указывайте мне существующие решения, если применимо.

+0

В моей текущей реализации мне пришлось создать панель задач в другом потоке. Это означало, что когда основное внимание уделялось панели excel, она не пыталась манипулировать клавишами. –

+0

Я надеялся, что пропустил вызов API, но, тем не менее, спасибо за комментарий, я попробую решение. Мы обязательно должны использовать некоторые трюки здесь и там при разработке плагинов Office. – Beaver

ответ

0

@beaver - Когда все элементы управления отключены на любом из окон панели, Excel тайно крадет фокус; заканчивается на ALT нажатием клавиши. Исправить эту ситуацию; ALT затем ESC ключ прессы.

В классе ..

Using System.Windows.Forms; 

....
После процедуры, которая не оставляет управления сосредоточены

SendKeys.Send("%"); 
SendKeys.SendWait("{ESC}"); 

[необязательно, но настоятельно рекомендуется для лучшей производительности]
... .
в вашем App.config

<configuration> 
    <appSettings> 
    <add key="SendKeys" value="SendInput"/> 
    </appSettings> 
...