Вопрос

Окружающая среда

  • Windows XP X32 Visual Studio 2005 Standard Edition
  • Honeywell Dolphin 9500 работает с Windows Mobile 2003 (Pocket PC 2003)
    • Со встроенным сканером штрих -кода и камерой B & W
    • Используя их SDK здесь.
  • .NET Compact Framework 1.0 SP3 и .NET Framework 1.1
  • Использование VC#

Цель

Я пытаюсь создать приложение, которое позволяет человеку сканировать штрих -код, а затем захватить изображение. Эти вещи не должны происходить одновременно. Пользователь должен иметь возможность дважды проверить сканирование штрих -кода, а затем перейти на часть приложения, которая обрабатывает захват изображения.


Проблема

Номера строк ссылаются на мой код в FriendPaste Link В разделе кода ниже.

У меня есть два обработчика событий: один для события декодирования от управления сканером штрих -кода, и один для вызова управления захватом изображения через событие Keydown. Управление Decode имеет свое собственное событие/декодированное событие/обработчик и набор ключа триггера с перечислением (LNS 201 и 202). Управление изображения, однако, нет. В его документации говорится, что в форме должен быть обработчик событий Keydown (LN 120) и перечисление ключа триггера (LN 178). После запуска приложения (без выборочного обработчика событий) сканер штрих -кода отлично работает, но переключившись на вкладку (или форму, как я также пробовал отдельные формы), с управлением захватом изображения и Нажатие ключа триггера на устройстве (сканирование в данном случае) заставляет портативный удар ведут себя так, как будто он все еще сканирует штрих -код (приходит красные огни, зеленый свет отображается, звучит, когда встречается с штрих -кодом) вместо поведения, обычно отображаемого при использовании. управление изображением (без света или белых огней, как вспышка).


Вещи, которые я пробовал

  • ВАЖНЫЙ: Если я удалю элемент управления Decode из приложения, управление изображением работает. Если я создаю отдельное приложение только с управлением изображением, оно работает.
  • Я положил точку перерыва в строке 210 и обнаружил, что событие Keydown никогда не достигается. В этот момент я попытался каким -то образом разделить обработчики или элементы управления событиями, поэтому я представил обработчик SelectedIndexchanged события для управления вкладками и после перехода на вкладку с соответствующим элементом управления, я попытался удалить обработчики событий. Я смог удалить обработчик Decodeevent, но все еще не смог поразить делегата обработчика событий Keydown, который я написал.
  • И управление декодом, и изображением из SDK Honeywell имеют события «отключить», которые (цитируют документацию) «отключаются от двигателя сканирования». Поэтому я попытался отключить и переосмыслить элементы управления в зависимости от того, на что вкладка я переключалась, но в этом тоже не удалась.
  • Я также где -то читал, что события формирования иногда могут быть нарушены, если форма теряет фокус. Таким образом, я внедрил Form.LostControl Event/Handler и поместил в это .focus (), чтобы вернуть фокус в форму, но безрезультатно.
  • Я сталкивался с несколькими людьми, предлагающими Keypreview = true и обработку/делегирование событий на уровне формы. Похоже, что версия 1 Compact Framework не реализует это, так как объекты моей формы не имеют члена Keypreview.
  • В рамках Enum TriggerKey (пример в строке 202) есть перечисление для ключа Enter на устройстве. Я попытался подключить это к управлению изображениями и сканировать до управления декодером, но все еще не смог нажать на событие Keydown.

Код

http://friendpaste.com/355CQCHGHVPKE5YR29LTHO

Я опубликовал код как ссылка FriendPaste, потому что он несколько длинный (~ 230 строк). Дайте мне знать, если я должен просто включить это здесь.


Нужна дополнительная информация?

Спросите, и я сделаю все возможное!

Я бы пометил этот Honeywell Dolphin 9500, но я новый пользователь.

Это было полезно?

Решение 3

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

Спасибо за помощь!

Другие советы

Причина, по которой я думаю, вы не можете добраться до KeyDown обработчик - это тот, который предназначен для TabControl1_IndexChanged это System.EventHandler которая является общей формой KeyDown.

Попробуйте сделать что -то подобное и посмотреть, поймает ли это KeyDown

private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
{
   if (sender is Form1 && e is KeyEventArgs)
   {
       Form1_KeyDown(sender,  (KeyEventArgs) e);
   }
   else
   {
       //Do other stuff
   }

}

Это немного взломать, но я думаю, что это сработает. Установлен AllKeys( true );. Анкет Это должно гарантировать, что ваше приложение захватывает любую нажатие клавиатуры.

Allkeys P/Signature Signature: http://blogs.msdn.com/b/mikefrancis/archive/2009/03/28/porting-gapi-keys-to-wm-6-1-hor-5-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-allkys-and-input- Management.aspx

Похоже, управление декодом глотает необходимое сообщение. Вы можете попробовать связаться с поддержкой разработчиков HHP. Если у них есть онлайн -форум поддержки разработчиков, который тоже может работать. В качестве теста, что произойдет, если вы начнете комментировать строки 192-202? Одна из этих строк заставляет ваше событие Keydown прекратить работу?

-Полх

Редактировать

ImageControl и DecodeControl оба принимают TriggerKey параметр. Похоже, они ожидают, что будут выполнять мероприятия Keypress.

Попробуйте это: иметь только один из тех, кто создается за раз в зависимости от того, на какой вкладке вы находитесь. Избавиться от 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;
    }
}

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top