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

VB.NET中TextChanged事件如何获取完整21位条码后再执行代码?

VB.NET 21位条码扫描完整获取解决方案

问题根源

你用TextChanged事件的问题在于每输入一个字符就会触发一次事件,如果后续逻辑里有修改文本框内容(比如清空)的操作,就会打断后续字符的输入;即便没有,也会在输入过程中多次触发判断,无法等到完整21位输入完成再执行代码。

下面给两种可行的解决办法:


方案1:利用扫描器的回车结束符(推荐)

绝大多数条码扫描器默认会在扫描完成后自动发送一个回车符,我们可以监听这个结束信号,再验证条码长度:

  1. 替换原TextChanged事件,改用KeyDown事件监听回车:
Private Sub number_KeyDown(sender As Object, e As KeyEventArgs) Handles number.KeyDown
    If e.KeyCode = Keys.Enter Then
        ' 去掉回车/换行符,避免长度统计包含控制字符
        Dim barcode As String = number.Text.TrimEnd(ControlChars.Cr, ControlChars.Lf)
        If barcode.Length = 21 Then
            Dim Value As String = barcode
            ' 这里写你展示相关数据的逻辑
            ' 示例:ShowRelatedData(Value)
            
            ' 清空文本框,准备下一次扫描
            number.Clear()
        End If
        ' 阻止回车符在文本框显示
        e.SuppressKeyPress = True
    End If
End Sub
  1. 如果扫描器没发送回车:
    打开扫描器的设置手册,找到“后缀字符”选项,开启“添加回车”即可,这是最稳定的方式。

方案2:用定时器判断输入间隔(无扫描器设置权限时用)

扫描器输入字符的间隔极短(通常小于100ms),手动输入间隔则长得多。我们可以用定时器监控,当输入停止超过设定时间(比如200ms),再检查条码长度:

  1. 在窗体上添加一个Timer控件(命名为tmrBarcode),设置Interval为200,Enabled为False。
  2. 编写以下代码:
Private Sub number_TextChanged(sender As Object, e As EventArgs) Handles number.TextChanged
    ' 每次输入字符时重启定时器
    tmrBarcode.Stop()
    tmrBarcode.Start()
End Sub

Private Sub tmrBarcode_Tick(sender As Object, e As EventArgs) Handles tmrBarcode.Tick
    tmrBarcode.Stop()
    Dim barcode As String = number.Text.Trim()
    If barcode.Length = 21 Then
        Dim Value As String = barcode
        ' 执行展示数据的逻辑
        ' ShowRelatedData(Value)
        
        number.Clear()
    End If
End Sub

提示:可以根据实际扫描速度调整Interval的值,确保能覆盖扫描器输入所有字符的时间。


内容的提问来源于stack exchange,提问作者Rishi Lakshman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:15:35