Private Sub txtKeyDown_Change()
On Error GoTo errhandle
    If g_intType = 1 Then  '键盘口扫描
        If Len(Trim(txtKeyDown)) > 11 Then
            txtKeyDown = ""
            
        ElseIf Len(Trim(txtKeyDown)) = 11 Then
            '**********************************************************
            m_blnQuery = False  '取消查询状态
            
            '扫描条码添加到listMsg
          If txtKeyDown <> "" Then
            listMsg.AddItem Trim(txtKeyDown)
            If m_cls.AddNew(Trim(txtKeyDown)) = False Then '添加扫描记录到数据库
                Call DisplayMessageBox("扫描失败!")
            End If
          End If
            txtKeyDown.Text = ""
            '**********************************************************
        Else
            txtKeyDown.SetFocus
        End If
    End If
errhandle:
End Sub
这是我的代码。现在有一个问题不好解决就是。如果txtkeydown中有数据字。要是在扫描就会把原来的位数也给加到11位这时扫出的条码就不对了。

解决方案 »

  1.   

    条码扫描是很快的,你可以用个定时器定时清空txtkeydown中的内容
      

  2.   

    扫描枪通常都是带回车符的
    所以可以在text控件的KeyDown事件中去判断回车符,然后执行你相应的过程,过程完成后就清空文本,这样就不会文本内容重叠了...
      

  3.   

    有些时候就必须得人工控制的,扫描扫描时就像手工敲键盘一样,只是速度很快而已,
    就像你手工输入一样,当Text中有资料时,这些资料到底要不要是你去决定,要时就保留不要时就删除,扫描器当然也是一样
    只是你可以做的方便些,把Text中的所有资料全选中,当扫描时就可以直接覆盖
    '在取得焦点时全选中
    Private Sub Text1_GotFocus()
       Text1.SelStart = 0
       Text1.SelLength = Len(Text1.Text)
    End Sub'按回车以及扫描完后全选中
    Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
       If KeyCode = 13 Then
          Text1.SelStart = 0
          Text1.SelLength = Len(Text1.Text)
       End If
    End Sub
      

  4.   

    '在取得焦点时全选中
    Private Sub Text1_GotFocus()
       sendkeys "{home}+{end}"
    End Sub'按回车以及扫描完后全选中
    Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
       If KeyCode = 13 Then
          sendkeys "{home}+{end}"
       End If
    End Sub等于先按下Home键,再按下Shift+End键