在触发_Change事件之前验证文本框

时间:2018-11-20 13:00:49

标签: string validation textbox vb6

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

由于用户希望能够扫描条形码以填充TextBox或手动输入数据,因此我还将PC上连接了条形码扫描仪。

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

股票条形码的前缀为“ 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-TR0 *”,“ 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 /的前缀,但删除了两个*字符(在条形码的开头和结尾,这是扫描仪将其读取为条形码所必需的)

1 个答案:

答案 0 :(得分:0)

您可以尝试将条形码阅读器设置为在扫描的条形码末尾返回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