10

我想用 c# 语言创建一个会计程序。我想使用条形码阅读器在商店中搜索产品(这对我的程序来说是可选的)现在,如果卖家使用条形码阅读器,则在主要形式中获取处理方法或事件的条形码值;如何在表单背景(无文本框)中获取处理方法或事件的条形码值?

注意:我的条码阅读器是 HID(USB 接口)

4

1 回答 1

19

条形码设备的行为类似于键盘。当您在文本框中获得焦点时,它会将字符发送到文本框,就像您从键盘键入它们一样。

如果您不想使用文本框,则需要订阅键盘事件处理程序来捕获条形码流。

Form1.InitializeComponent():

this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Form1_KeyPress);

处理程序和支持项目:

DateTime _lastKeystroke = new DateTime(0);
List<char> _barcode = new List<char>(10);

private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
    // check timing (keystrokes within 100 ms)
    TimeSpan elapsed = (DateTime.Now - _lastKeystroke);
    if (elapsed.TotalMilliseconds > 100)
        _barcode.Clear();

    // record keystroke & timestamp
    _barcode.Add(e.KeyChar);
    _lastKeystroke = DateTime.Now;

    // process barcode
    if (e.KeyChar == 13 && _barcode.Count > 0) {
        string msg = new String(_barcode.ToArray());
        MessageBox.Show(msg);
        _barcode.Clear();
    }
}

您必须跟踪“击键”并注意使用条形码流发送的“回车”。这可以很容易地在数组中完成。为了区分用户击键和条形码击键,您可以做的一个肮脏的技巧是跟踪击键的时间。

例如,如果你得到一个间隔小于 100 毫秒的击键流,以回车结尾,你可以假设它是一个条形码并进行相应的处理。

或者,如果您的条形码扫描仪是可编程的,您也可以发送特殊字符或序列。

于 2012-06-01T12:18:09.830 回答