Golden Basim Ответов: 2

Чтение штрих-кода с чтением штрих-кода без текстового поля


привет,

мне нужно создать POS-окно в моем приложении C# ..теперь я создал все вещи , только одну вещь, которую я хочу сделать :
я хочу искать штрих-код без текстового поля .. так что я могу получить штрих-код после того, как считыватель штрих-кодов прочитает его, если gridview или любой другой элемент управления был сфокусирован ..

так что же это за событие, которое срабатывает, когда считыватель штрих-кодов начинает считывать код ?

Что я уже пробовал:

я пытался искать об этом, но не могу найти никаких ясных ответов

2 Ответов

Рейтинг:
9

OriginalGriff

Проблема в том, что большинство сканеров штрих-кодов поставляются настроенными на работу в качестве клавиатуры, что дает две проблемы:
1) Вы не можете сказать разницу между "реальными" данными клавиатуры и "подлинными данными клавиатуры штрих-кода", потому что источник данных не сохраняется системой.
2) поскольку это данные клавиатуры, они автоматически направляются к текущему активному элементу управления вводом, а не к элементам управления без ввода.

Обычно вы можете настроить сканер на предоставление кодов "ввод" и "вывод", которые позволяют вам отличать клавиатуру от данных штрих - кода - хотя то, как вы это делаете, варьируется от сканера к сканеру и даже от модели к модели, поэтому вам нужно будет проверить у производителя, как вы это делаете, - что решает проблему номер один.
Это также может помочь решить проблему номер два: захватив ввод с клавиатуры на уровне формы (переопределение ProcessCmdKey в вашей форме, чтобы сделать это) и глядя на ваши свинцовые и хвостовые последовательности, вы можете идентифицировать и обработать свой штрих-код.
Но... подумайте хорошенько, прежде чем сделать это: как часто вы идете в супермаркет, и оператор должен вручную вводить данные штрих-кода, потому что товар не будет сканироваться, штрих-код отсутствует, штрих-код поврежден? Использование текстового поля позволяет оператору вводить данные в качестве резервной системы и обычно довольно необходимо ...


Golden Basim

спасибо..
я не знаю, почему ProcessCmdKey не читает код успешно ..

я попытался отсканировать этот код (3PZ.55.24861456.17), но результат был ( 33PZ .55. 24861456. 17)..

Рейтинг:
18

Mehdi Gholam

Обработайте глобальный ввод с клавиатуры в вашей форме следующим образом :

private string _barcode = "";
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
     char c = (char)keyData;

     if (char.IsNumber(c))
         _barcode += c;

     if (c == (char)Keys.Return)
     {
         DoSomethingWithBarcode(_barcode);
         _barcode="";
     }

     return base.ProcessCmdKey(ref msg, keyData);
}
и сделайте то, что вам нужно, со значением штрих-кода в DoSomethingWithBarcode() метод.


Golden Basim

спасибо за ваш ответ... я хочу знать, как запустить "ProcessCmdKey", когда мой считыватель штрих-кодов начнет работать ? какое событие я могу использовать ?

спасибо

Mehdi Gholam

Ты не убегаешь ProcessCmdKey(), он всегда будет работать на ключевом входе, как прослушиватель событий.

Golden Basim

спасибо , это работает, но почему я заставляю его принимать символы и символы, такие как ( - ,/,.,...), а не только число ..
я попытался отсканировать этот код (3PZ.55.24861456.17), но результат был ( 33PZ. 55. 24861456. 17)

Mehdi Gholam

Вы можете прокомментировать оператор if, который проверяет только числа.

Golden Basim

я сделал это но он читал клавишу ENTER в коде так похоже :
этот код " 4063717659543
- не существует!

Mehdi Gholam

Не добавляйте "enter" в строку и не обрезайте ее перед использованием.

Golden Basim

я использовал этот код.Метод toString().TrimEnd('\Р');
но результат все равно есть :
4063717659543\Р

Golden Basim

это работает :
код = код.Заменить("\г\п", "").Заменить("\Р", "").Заменить("\п", "");

все еще не могу прочитать характер ..

Golden Basim

я попытался отсканировать этот код (3PZ.55.24861456.17), но результат был ( 33PZ. 55. 24861456. 17)

Golden Basim

также еще одна проблема , я отсканировал этот код (4063717659543) , он будет работать , но когда я попытался отсканировать его еще раз, результат был (44063717659543) ... почему он добавляет (4) в начале ?

Golden Basim

"также еще одна проблема , я отсканировал этот код (4063717659543) , он будет работать , но когда я попытался отсканировать его еще раз, результат был (44063717659543) ... почему он добавляет (4) в начале ?"

эта проблема возникает только в том случае , если строка, добавленная в gridview, содержит ошибки, поэтому я думаю, что остальная часть кода не запускается .. но я не знаю, почему я могу решить эту проблему

Golden Basim

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