Это что-то вроде хака, но я думаю, что это сработает.Установите AllKeys( true );
.Это должно гарантировать, что ваше приложение фиксирует нажатие любой клавиатуры.
AllKeys P / подпись Invoke: http://blogs.msdn.com/b/mikefrancis/archive/2009/03/28/porting-gapi-keys-to-wm-6-1-and-6-5.aspx
Общая информация AllKeys: http://windowsteamblog.com/windows_phone/b/windowsphone/archive/2009/07/14/just-say-no-to-gapi-what-you-need-to-know-about-allkeys-and-input-management.aspx
Похоже, что управление декодированием поглощает нужное вам сообщение.Вы можете попробовать связаться со службой поддержки HHP.Если у них есть форум поддержки разработчиков онлайн, это тоже может сработать.В качестве теста, что произойдет, если вы начнете комментировать строки 192-202?Одна из этих строк приводит к тому, что ваше событие нажатия клавиш перестает работать?
-PaulH
Edit
imageControl и decodeControl оба принимают TriggerKey
параметр.Звучит так, как будто они ожидают, что будут обрабатывать события нажатия клавиш сами.
Попробуйте это: только один из них создается одновременно, в зависимости от того, на какой вкладке вы находитесь.Избавьтесь от кода обработки Form1_KeyDown
все вместе (включая AllKeys).Посмотрите, работает ли это.
Кроме того, вы все равно можете убить свой обработчик Form1_KeyDown
, но оставить оба элемента управления такими же, как они, и вместо этого сделать это в своем обработчике tabControl1_SelectedIndexChanged
:
private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
if (this.tabControl1.SelectedIndex == 0)
{
this.decodeControl1.TriggerKey = HHP.DataCollection.Common.TriggerKeyEnum.TK_ONSCAN;
this.imageControl1.TriggerKey = null;
}
else if (this.tabControl1.SelectedIndex == 1)
{
this.decodeControl1.TriggerKey = null;
this.imageControl1.TriggerKey = TriggerKeyEnum.TK_ONSCAN;
}
}
Теперь только один из них будет наблюдать за кнопкой сканирования в зависимости от того, на какой вкладке вы находитесь.