(我正在使用带有 Fix1 的 EMDK v2.9 的 VS2008)
我有一个表格,我声明我的读者:
Private WithEvents barcodeReader As Barcode.Barcode = New Barcode.Barcode
我希望它仅在窗体上的控件之一中处于活动状态,因此我这样做:
Private Sub txbAccount_GotFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles txbAccount.GotFocus
barcodeReader.EnableScanner = True
End Sub
并在该文本框的Lost Focus
事件中以相同的方式将其关闭。
这是OnRead
子:
Private Sub barcodeReader_OnRead(ByVal sender As Object, ByVal readerData as Symbol.Barcode.ReaderData) Handles barcodeReader.OnRead
If (readerData.HasReader) Then
Try
Dim ctrl As TextBox = Ctype(GetActiveControl(), TextBox)
If (ctrl.Name = "txbAccount") Then
ctrl.Text = readerData.Text
End If
Catch ex As Exception
MessageBox.Show("Error: " & ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1)
End If
End Sub
问题是:一旦我在文本框的GotFocus
事件中启用扫描仪,OnRead
事件就会一遍又一遍地触发(数据为空),直到我实际按下扫描键,扫描实际数据 - 然后它停止。
我已经读到也许Handled
属性没有正确设置,但是我没有看到这样的属性。
快速回答的问题是handled
通常在e
事件参数中(尽管我在那个例程中没有看到任何readerdata
它可能在那里!?
另一方面,对于条形码扫描仪,他们通常使用sendkeys命令简单地将字符串传递到系统。这些可以通过使用任何OnKeyPress
/OnKeyDown
轻松捕获...等。如果你想沿着这条路走下去,你需要把每个按键/向下作为一个单独的字符,而你的条形码。OnRead 可能会为您完成所有这些工作。(同样,我没有使用您引用的 EMDK)。
最后,"通常"条形码扫描仪以cr
(回车)结尾,一些条形码扫描仪可以将其关闭,或在设置中更改这些。如果不是,这可能是其他地方引用e.handled
正在谈论的地方。这将是类似的东西..
if e.KeyChar = Chr(Keys.Enter) then
e.handled = true
end if
这将阻止发送到对象(文本框),因此不会失去焦点(因为没有传递回车键)
希望这有帮助..有点:) 鸡