TextBox: TextChanged Event - автоматическая проверка, когда введены x символов - PullRequest
1 голос
/ 12 апреля 2011

У меня есть приложение, которое считывает штрих-код со сканера USB.Я хочу выполнить поиск в БД, как только штрих-код будет введен в определенное текстовое поле.

Очевидно, я собираюсь поместить свой код в обработчик событий TextChanged, но у меня есть небольшая проблема в том, чтосчитываемый штрих-код может содержать 41 или 43 символа.Вопрос в том, как я узнаю, какой тип кода вводится.Сканер просто вводит код в любое поле с фокусом в виде строки символов - как если бы он был введен с клавиатуры - поэтому я не могу запросить сканер, чтобы определить длину кода.

Я думализ двух подходов:

  • Определить первый символ, подождать xx секунд, а затем выполнить мой поиск - дать достаточно времени для ввода полного кода
  • Определить 41-й символ,подождите 0.x секунд, а затем выполните поиск.

ОК, я уверен, что они будут работать нормально, но есть ли более красноречивые решения?

ЗАКЛЮЧЕНИЕ :

Некоторые полезные предложения, однако Ондрей вдохновил простейшее решение для моего сценария.У 43 кодов символов есть два символа, которые являются фиксированными для всех кодов - наличие (или нет) этих двух символов означает, что я знаю, что ждать, если эти два символа присутствуют, но присутствуют только 41 символ.

Я простоМне нужно подтвердить мое подозрение, что коды из 41 символа не могут содержать эту пару символов в этой конкретной позиции - что я вполне уверен, так и есть.

Ответы [ 3 ]

2 голосов
/ 12 апреля 2011

Один из вариантов - выполнить асинхронный поиск после чтения 41-го символа, ожидая еще двух символов в потоке пользовательского интерфейса.Если вы получили удар по этому штрих-коду, вы можете перестать ждать и показать этот результат.В качестве альтернативы, если 42-й символ введен во время поиска, вы можете прервать его и сразу же начать новый поиск при вводе 43-го символа.Это предполагает, однако, что 43-символьный штрих-код не начинается с существующего 41-символьного штрих-кода.

Я бы также посмотрел и посмотрел, содержат ли штрих-коды какой-либо шаблон (например: 41-символьные коды имеют Xкак 9-й символ и 43-символьные коды этого не делают), и отсканируйте его по мере ввода.

1 голос
/ 12 апреля 2011

Я бы обернул вызов поиска в БД в фоновом рабочем классе.
В обработчике событий TextChanged первое, что я сделал бы, если бы работал фоновый работник, я бы отменил его.Затем, если длина текста равна 41 или 43, я бы обработал вызов БД в фоновом режиме.

Таким образом, если пользователь нажимает 41 символ, вызов происходит, если они вводят 42-й символ, вызовотменено, однако, если они введут 43, то удалят два символа (чтобы вернуться к 41 символу), вы все равно будете выполнять правильный поиск.

1 голос
/ 12 апреля 2011

У вас может быть таймер, и, хотя, скажем, 1 с не произошло никаких изменений, можно выполнить поиск, если он будет длиной 41 или 43 символа.

...