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

VB.NET中TextBox扫描条码时如何自动触发退格?求排查或替代方案

VB.NET条码扫描自动提取账号密码解决方案

现有代码问题分析

你当前的代码逻辑仅在手动按下退格键(ChrW(8))时才会执行账号密码提取,核心问题在于触发条件设置错误:条码扫描是一次性向文本框输入完整字符串,不会触发退格键的KeyPress事件,所以扫描后无法自动执行提取逻辑,必须手动按退格才生效。

解决方案

方案1:利用TextChanged事件(推荐)

条码扫描会快速向文本框输入完整内容,TextChanged事件会在文本内容变化时触发,我们可以在这个事件中直接判断文本是否匹配目标正则,一旦匹配就提取账号密码:

Private Sub txtUser_TextChanged(sender As Object, e As EventArgs) Handles txtUser.TextChanged
    Const pattern As String = "USERNAME : (\S+)-PASSWORD : (\S+)"
    Dim m As Match = Regex.Match(txtUser.Text, pattern)
    If m.Success Then
        ' 先解除事件绑定,避免修改文本时重复触发TextChanged导致死循环
        RemoveHandler txtUser.TextChanged, AddressOf txtUser_TextChanged
        txtUser.Text = m.Groups(1).Value
        txtPassword.Text = m.Groups(2).Value
        ' 重新绑定事件
        AddHandler txtUser.TextChanged, AddressOf txtUser_TextChanged
    End If
End Sub

方案2:利用扫码枪的结束符(回车)触发

多数扫码枪会在扫描完成后自动输出回车符(ChrW(13)),我们可以在KeyPress事件中判断这个结束符,触发提取逻辑:

Private Sub txtUser_KeyPress(sender As Object, e As KeyPressEventArgs) Handles txtUser.KeyPress
    Const pattern As String = "USERNAME : (\S+)-PASSWORD : (\S+)"
    ' 判断是否为扫码结束的回车符
    If e.KeyChar = ChrW(13) Then
        Dim m As Match = Regex.Match(txtUser.Text, pattern)
        If m.Success Then
            txtUser.Text = m.Groups(1).Value
            txtPassword.Text = m.Groups(2).Value
            ' 取消回车的默认行为,避免文本框换行或触发其他控件的默认按钮
            e.Handled = True
        Else
            ' 匹配失败时的提示逻辑
            MessageBox.Show("条码格式不正确,请重新扫描")
        End If
    End If
End Sub

注意事项

  • 方案1需注意:修改txtUser.Text会再次触发TextChanged事件,因此必须先解除事件绑定,修改完成后再重新绑定,避免死循环。
  • 方案2需确认你的扫码枪是否支持输出回车结束符,若没有可在扫码枪的设置界面开启该功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 10:17:45