扫描仪扫描值不完整

时间:2019-03-14 04:35:17

标签: c# .net datagridview barcode barcode-scanner

我目前正在开发C#验证系统。

我有一个datagridview,允许用户扫描条形码并使用正则表达式进行验证。

现在是问题:

我有一个带有RS GS和EOT的条形码值,因此扫描的值在c#中看起来会有所不同

RS \u001e 
GS \u001d 
EOT \u0004 

当我尝试使用扫描仪进行扫描时,当GS和EOT消失时,该值仅保留为RS,但是我尝试将其扫描到notepad ++,并使用复制将其粘贴回输入字段中,仅适用。

C#.net尝试读取扫描仪扫描值有困难吗?

样本值:

在记事本++

enter image description here

在c#字符串中扫描的值:

  

[)> \ u001e99888887777766665555444433333 \ u001e

在记事本++中的c#字符串粘贴值中:

  

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

GS和EOT丢失了(我扫描它的那一刻,我意识到它在输入字段中丢失了)

扫描值的

byte []:

  

[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

记事本++中粘贴的值的

byte []:

  

[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 :(得分:0)

我找到了解决办法。

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");
    }
}