在激发_Change事件之前验证TextBox



我有一个表单,上面有3个TextBox控件:库存代码、数量、证书编号。库存代码TextBox设置为在加载表单时自动聚焦。

我还在我的电脑上安装了一个条形码扫描仪,因为用户希望能够扫描条形码来填充TextBox,或者手动键入数据。

正在扫描的标签包含两个条形码。一个是证书编号,另一个是股票代码。

库存条形码的前缀为"SBC/",而证书条形码的前缀则为"C/"。

当用户扫描条形码时,如果焦点中的TextBox是股票代码TextBox,那么我想进行如下检查。

Private Sub txtStockCode_Change()
On Error GoTo errError1
If Len(txtStockCode.Text) >= 5 Then
If bChangeCode Then
If Left(txtStockCode.Text, 2) = "C/" Then
msgbox "You have scanned the certificate barcode; please scan the stock barcode."
txtStockCode.Text = ""
Else
bChangeCode = False
txtStockCode.Text = Replace(txtStockCode.Text, "SBC/", "")
txtStockCode.Text = Replace(txtStockCode.Text, "*", "")
End If
End If
End If
Exit Sub

假设目前的焦点是股票代码TextBox

如果扫描库存条形码,则应发生以下情况:

  • 股票代码长度大于5

  • 左5个字符="C/",因此正确的代码已被扫描

  • 更新TextBox文本值以删除所有*和前缀"SBC/">

例如,"SBC/A12-TR0*"变为"A12-TRO">

  • 证书编号长度大于5

  • 左5个字符do="C/",因此扫描了不正确的代码

  • MsgBox到用户

  • TextBox值重置为">

但是,无论将哪个代码扫描到股票代码TextBox中,都不会验证该值。

例如,"SBC/A12-TR0*"保留为"SBC/A12-TRO*","C/29760"保留为"C/29760">

由于证书TextBox中的验证代码相同,因此会重复相同的模式,反之亦然。

为什么我的值没有更新,或者如何在触发_Change之前验证输入?

编辑

我现在已将代码更改为

Private Sub txtStockCode_Change
If txtStockCode.Text <> "" Then
txtStockCode.Text = Replace(txtStockCode.Text, "SBC/", "")
txtStockCode.Text = Replace(txtStockCode.Text, "*", "")
End If
End Sub

但它仍然显示SBC/的前缀,但正在删除两个*字符(在条形码的开始和结束处,这是扫描仪将其作为条形码读取所需的(

您可以尝试将条形码读取器设置为在扫描的条形码末尾返回Enter键,然后使用Keypress事件进行检查并进行更改。

Sub txtStockCode_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
If Len(txtStockCode.Text) >= 5 Then
If bChangeCode Then
If Left(txtStockCode.Text, 2) = "C/" Then
msgbox "You have scanned the certificate barcode; please scan the stock barcode."
txtStockCode.Text = ""
Else
bChangeCode = False
txtStockCode.Text = Replace(txtStockCode.Text, "SBC/", "")
txtStockCode.Text = Replace(txtStockCode.Text, "*", "")
End If
End If
End If        
End If
End Sub

相关内容

  • 没有找到相关文章

最新更新