You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

条码扫描至ListBox时重复校验异常问题求助

条码扫描重复添加问题的排查与解决

问题分析

你遇到的这个情况确实有点反常:连续扫两次同一条码都会被加到列表框里,直到第三次才弹出重复提示。结合你贴的代码,我来拆解下可能的原因和修复方案。

核心原因猜测

  1. 未拦截Enter键的默认行为
    你的txtWO_KeyDown事件里没取消Enter键的系统默认操作。扫描器自动发送Enter触发事件后,系统还会继续执行Enter的默认逻辑(比如焦点转移、文本框的原生输入处理),这可能导致你调用txtWO.Clear()之后,文本框内容又被意外恢复,或者扫描器的输入被重复处理,让同一条码能连续添加两次。

  2. 条码带不可见字符
    很多扫描器会在条码末尾附加回车、换行或空格这类肉眼看不到的字符,导致两次扫描的字符串看似相同,实际内容有差异(比如第一次是"ABC123",第二次是"ABC123\r")。前两次因为细微差异被判定为不同内容,直到第三次扫描的字符完全一致,才会触发重复提示。

修复方案

1. 拦截Enter键的默认行为

在处理完条码添加逻辑后,加上两行代码取消默认行为,避免系统后续干扰:

Private Sub txtWO_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtWO.KeyDown
    If e.KeyCode = Keys.Enter Then
        ' 先去除条码前后空白,规避不可见字符影响
        Dim barcode As String = txtWO.Text.Trim()
        AddUnique(barcode)
        txtWO.Clear()
        txtWO.Focus()
        
        ' 关键:取消Enter键的系统默认行为
        e.Handled = True
        e.SuppressKeyPress = True
    End If
End Sub

2. 标准化条码字符串

对获取到的条码做统一处理,比如去空白、转大写,避免扫描器输出的格式差异导致误判:

' 修改KeyDown事件里的条码获取逻辑
Dim barcode As String = txtWO.Text.Trim().ToUpperInvariant()

3. 加调试日志排查细节

如果还是不确定问题,可在AddUnique里加调试输出,查看每次添加的字符串实际内容和长度,确认是否有隐藏字符:

Private Sub AddUnique(StringToAdd As String)
    ' 输出到调试窗口,查看字符串细节
    Debug.WriteLine($"尝试添加的条码:""{StringToAdd}"",长度:{StringToAdd.Length}")
    
    If lstScanBom.Items.Contains(StringToAdd) Then
        MsgBox("Articol duplicat!", vbOKOnly)
    Else
        lstScanBom.Items.Add(StringToAdd)
        Debug.WriteLine("条码添加成功!")
    End If
End Sub

验证效果

按上面的修改测试后,连续扫同一条码:

  • 第一次:条码正常添加到列表
  • 第二次:立即弹出重复提示
  • 第三次:同样触发重复提示

这样就能解决你遇到的问题了。

内容的提问来源于stack exchange,提问作者Catalin Cernat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:04:42