我有一个表单,上面有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