来自扫描程序 (Motorla EMDK) 的 OnRead 事件持续触发



(我正在使用带有 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

这将阻止发送到对象(文本框),因此不会失去焦点(因为没有传递回车键)

希望这有帮助..有点:) 鸡

最新更新