我目前正在开发C#验证系统。
我有一个datagridview,允许用户扫描条形码并使用正则表达式进行验证。
现在是问题:
我有一个带有RS GS和EOT的条形码值,因此扫描的值在c#中看起来会有所不同
RS \u001e
GS \u001d
EOT \u0004
当我尝试使用扫描仪进行扫描时,当GS和EOT消失时,该值仅保留为RS,但是我尝试将其扫描到notepad ++,并使用复制将其粘贴回输入字段中,仅适用。
C#.net尝试读取扫描仪扫描值有困难吗?
样本值:
在记事本++
在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
答案 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");
}
}