我想用 c# 语言创建一个会计程序。我想使用条形码阅读器在商店中搜索产品(这对我的程序来说是可选的)现在,如果卖家使用条形码阅读器,则在主要形式中获取处理方法或事件的条形码值;如何在表单背景(无文本框)中获取处理方法或事件的条形码值?
注意:我的条码阅读器是 HID(USB 接口)
条形码设备的行为类似于键盘。当您在文本框中获得焦点时,它会将字符发送到文本框,就像您从键盘键入它们一样。
如果您不想使用文本框,则需要订阅键盘事件处理程序来捕获条形码流。
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 毫秒的击键流,以回车结尾,你可以假设它是一个条形码并进行相应的处理。
或者,如果您的条形码扫描仪是可编程的,您也可以发送特殊字符或序列。