Сканирование сканером не завершено - PullRequest
0 голосов
/ 14 марта 2019

Я в настоящее время разрабатываю систему проверки на C #.

У меня есть представление данных, которое позволяет пользователю сканировать штрих-код и проверять его с помощью регулярных выражений.

Теперь проблема:

У меня есть значение штрих-кода с RS GS и EOT, поэтому отсканированное значение будет выглядеть по-другому в c #

RS \u001e 
GS \u001d 
EOT \u0004 

Когда я пытаюсь сканировать его с помощью сканера, значение остается только RS, пока GS и EOT отсутствуют, но я попытался отсканировать его в notepad ++ и с помощью копирования вставить его обратно в поле ввода, оно только работает.

C # .net не удается прочитать отсканированное значение сканера?

Пример значения:

в блокноте ++

enter image description here

в отсканированном значении строки c #:

[)> \ u001e99888887777766665555444433333 \ u001e

в c # вставленное значение из блокнота ++:

[)> \ u001e99 \ u001d88888 \ u001d77777 \ u001d6666 \ u001d5555 \ u001d4444 \ u001d33333 \ u001e \ u0004

GS и EOT отсутствуют (как только я сканирую их, я понимаю, что их нет в поле ввода)

байт [] отсканированного значения:

[0]: 91
[1]: 41
[2]: 62
[3]: 30
[4]: 57
[5]: 57
[6]: 56
[7]: 56
[8]: 56
[9]: 56
[10]: 56
[11]: 55
[12]: 55
[13]: 55
[14]: 55
[15]: 55
[16]: 54
[17]: 54
[18]: 54
[19]: 54
[20]: 53
[21]: 53
[22]: 53
[23]: 53
[24]: 52
[25]: 52
[26]: 52
[27]: 52
[28]: 51
[29]: 51
[30]: 51
[31]: 51
[32]: 51
[33]: 30

байт [] вставленного значения из блокнота ++:

[0]: 91
[1]: 41
[2]: 62
[3]: 30
[4]: 57
[5]: 57
[6]: 29
[7]: 56
[8]: 56
[9]: 56
[10]: 56
[11]: 56
[12]: 29
[13]: 55
[14]: 55
[15]: 55
[16]: 55
[17]: 55
[18]: 29
[19]: 54
[20]: 54
[21]: 54
[22]: 54
[23]: 29
[24]: 53
[25]: 53
[26]: 53
[27]: 53
[28]: 29
[29]: 52
[30]: 52
[31]: 52
[32]: 52
[33]: 29
[34]: 51
[35]: 51
[36]: 51
[37]: 51
[38]: 51
[39]: 30
[40]: 4

1 Ответ

0 голосов
/ 18 марта 2019

Я нашел себе решение.

C # .NET блокирует значение управляющих символов (GS, RS, EOT и т. Д.)

Чтобы заставить его прочитать значение, все, что я могу сделать, это прочитать нажатие клавиши пользователя и, если ввод соответствует управляющим символам. Затем я программно добавлю значение ASCII управляющих символов:

RS \u001e
GS \u001d
EOT \u0004

Код будет выглядеть примерно так:

private void txtScanInput_KeyPress(object sender, KeyPressEventArgs e)
{
    try
    {
        int i = this.txtScanInput.SelectionStart;
        switch ((int)(e.KeyChar))
        {
        case 4: //EOT
            this.txtScanInput.Text = this.txtScanInput.Text.Insert(this.txtScanInput.SelectionStart, "\u0004");
            this.txtScanInput.SelectionStart = i + 6;
            e.Handled = true;
            break;

        case 29: //GS
            this.txtScanInput.Text = this.txtScanInput.Text.Insert(this.txtScanInput.SelectionStart, "\u001d");
            this.txtScanInput.SelectionStart = i + 6;
            e.Handled = true;
            break;

        case 30: //RS
            this.txtScanInput.Text = this.txtScanInput.Text.Insert(this.txtScanInput.SelectionStart, "\u001e");
            this.txtScanInput.SelectionStart = i + 6;
            e.Handled = true;
            break;
        }
    }
    catch (Exception ex)
    {
        logger.Error(ex);
        MessageBox.Show(MessageConstants.APPLICATION_ERROR + "\n[" + ex.Message + "]\n[" + ex.InnerException + "]\n" + AppUtil.getLatestErrorDAL(),
            MessageConstants.SYSTEM_NAME + " - txtScanInput_KeyPress");
    }
}
...