我想用c#语言创建一个会计程序.我想使用条形码阅读器在商店中搜索产品(这对于我的程序是可选的)现在,如果卖家使用条形码阅读器,则以主要形式获取处理方法或事件的条形码值; 如何在窗体背景(没有文本框)中获取句柄方法或事件的条形码值?
注意:我的条形码阅读器是HID(USB接口)
lti*_*_sh 18
条形码设备的行为类似于键盘.当您将焦点放在文本框中时,它会将字符发送到文本框,就像您从键盘输入它们一样.
如果您不想使用文本框,则需要订阅键盘事件处理程序以捕获条形码流.
Form1.InitializeComponent():
this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Form1_KeyPress);
Run Code Online (Sandbox Code Playgroud)
处理及配套物品:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
您必须跟踪"击键"并注意与条形码流一起发送的"回车".这可以很容易地在一个数组中完成.要区分用户击键和条形码击键,您可以做的一个脏技巧是跟踪击键的时间.
例如,如果你得到一个小于100毫秒的击键流,以一个回车结束,你可以假设它是条形码并相应地处理.
或者,如果条形码扫描仪是可编程的,您还可以发送特殊字符或序列.