Окружающая среда
- 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
- Использование VС#
Цель
Я пытаюсь создать приложение, которое позволяет человеку сканировать штрих-код, а затем фиксировать изображение. Эти вещи не должны происходить одновременно. Пользователь должен иметь возможность дважды проверять сканирование штрих-кода, а затем переходить на часть приложения, которое обрабатывает захват изображения.
Проблема
Номера строк ссылаются на мой код в ссылку друга в разделе "Код" ниже.
У меня есть два обработчика событий: один для события декодирования из управления сканированием штрих-кода и один для вызова управления захватом изображения через событие KeyDown. Элемент управления декодированием имеет свое собственное событие/обработчик DecodeEventHandler и триггерный ключ с перечислением (lns 201 и 202). Однако контроль изображения не работает. В его документации указано, что в форме должен быть обработчик события KeyDown (ln 120) и перемычка ключа запуска (ln 178). После запуска приложения (без обработчика событий SelectedIndexChanged [ln 76]) сканер штрих-кода отлично работает, но переключается на вкладку (или Form, как я уже пробовал отдельные формы), с контролем захвата изображения и нажатие клавиши Trigger на устройстве (SCAN в этом случае) приводит к тому, что карманный компьютер работает так, как будто он все еще сканирует штрих-код (загораются красные огни, зеленый индикатор показывает, подает звуковой сигнал при обнаружении штрих-кода) вместо поведения, обычно отображаемого при использовании управление изображением (без огней или белых огней, таких как вспышка).
Вещи, которые я пробовал
- ВАЖНО: Если я удалю элемент управления декодированием из приложения, управление изображением будет работать. Если я создаю отдельное приложение только с контролем изображения, оно работает.
- Я поставил точку прерывания в строке 210 и обнаружил, что событие KeyDown никогда не попадает. В этот момент я попытался как-то изолировать обработчики событий или элементы управления, поэтому я представил обработчик события SelectedIndexChanged для моего элемента управления вкладкой и, перейдя на вкладку с соответствующим элементом управления, попытался удалить обработчики событий. Мне удалось удалить обработчик DecodeEvent, но он все еще не смог попасть в делегат обработчика событий KeyDown, который я написал.
- Оба элемента управления декодированием и изображением из Honeywell SDK имеют события "Отключить", которые (чтобы процитировать документацию) "Отключить от механизма сканирования". Поэтому я попытался отключить и снова подключить элементы управления, на основе которых я переключился, но в этом тоже не увенчался успехом.
- Я также читал, что события формы иногда могут быть нарушены, если форма теряет фокус. Поэтому я внедрил событие/обработчик Form.LostControl и включил this.Focus(), чтобы вернуть фокус в форму, но безрезультатно.
- Я столкнулся с несколькими людьми, предлагающими KeyPreview = true и обработку/делегирование событий на уровне формы. Похоже, что .NET Compact Framework версии 1 не реализует это, так как мои объекты формы не имеют элемента KeyPreview.
- Внутри перечисления TriggerKey (пример в строке 202) есть перечисление для клавиши Enter на устройстве. Я попробовал подключиться к управлению изображениями и отсканировал до элемента управления декодером, но все еще не смог попасть в событие KeyDown.
код
http://friendpaste.com/355cQOCghvPkE5YR29lthO
Я разместил код как ссылку для ссылки, потому что он несколько длинный (~ 230 строк). Дайте мне знать, если я просто включу его здесь.
Нужна дополнительная информация?
Спроси, и я сделаю все возможное!
Я бы пометил этот Honeywell Dolphin 9500, но я новый пользователь.