0

Я сделал приложение Windows Form с текстовым полем. Я заставлю пользователей использовать сканер штрих-кода, поэтому ввод клавиатуры должен быть отключен. Событие KeyPressed не работает, так как также отключен ввод от сканера штрих-кода.Вход Texbox, отключите клавиатуру, держите для сканера штрих-кода

Я думал, может быть, я могу установить таймер на событие TextChanged, но я действительно не знаю, как это работает.

У кого-то есть хорошая идея?

+0

Вы должны просто установить для свойства enabled текстового поля значение false, а затем использовать любой API, который у вас есть, от сканера штрих-кода, чтобы подключиться к событию сканирования и установить значение текстового поля для результата сканирования. –

+1

Надеюсь, что это поможет http://nicholas.piasecki.name/blog/2009/02/distinguishing-barcode-scanners-from-the-keyboard-in-winforms/ – Steve

ответ

2

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

Я делал это раньше, и есть несколько решений, я знаю:

  1. Использование сканера штрих-кода, который не является HID сканер штрих-кодов. Пример: Серийный, или что-то в этом роде.
  2. Настройте сканер штрих-кода для отправки специального символа в начале и в конце сканирования штрих-кода. (Это то, что вы можете сделать, если у вас есть руководство для конкретной модели сканера штрих-кода.) Напишите свое событие KeyPressed для прослушивания этих специальных символов в качестве сигнала о том, что он получает данные из сканера штрих-кода. Когда он их видит, включите и отключите текстовое поле.
  3. Используйте вызовы Windows API для непосредственного общения со сканером штрих-кода. Это требует знания VID и PID сканера штрих-кода и некоторых подробных знаний об API, таких как GetRawInputDeviceInfo, GetRawInputData и RegisterRawInputDevices. Это очень мощно, поскольку вы можете получать ввод штрих-кода из любого места приложения, но он очень сложный.

Однако одно предостережение: вы, вероятно, не хотите вообще отключать текстовое поле. Что делать, если штрих-код поврежден и сканер не может его прочитать? Вы всегда хотите, чтобы пользователь мог вручную ввести штрих-код. В следующий раз, когда вы пройдете через кассовый аппарат в магазине, обратите внимание, что всегда есть способ вручную ввести штрих-код.

+0

Спасибо, еще один сканер штрих-кода не является вариантом. Возможно ли с помощью таймера или что-то еще? Вход со сканера штрих-кода намного быстрее, чем у человека. – Marten

+1

Это зависит от сканера штрих-кода и человека. Я видел медленные сканеры штрих-кодов и быстрые люди. Я рекомендую избегать решения, основанного на синхронизации. В конечном счете, основная проблема здесь в том, что интерфейс сканера штрих-кода сосать. Они притворяются, что это клавиатура, и не предоставляют полезных API для доступа к ним. –