Рейтинг:
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
эта проблема возникает, когда я нажимаю на любое место в форме, но этого не происходит, если я использую только считыватель штрих-кодов