c# - 获取条码读取器值表单后台监控

标签 c# .net winforms

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

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

最佳答案

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

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

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 毫秒的击键流,您可以假定它是条形码并进行相应处理。

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

关于c# - 获取条码读取器值表单后台监控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10850050/

相关文章:

.net - ASP.NET 2.0编译错误: Make sure that the class defined in this code file matches the 'inherits' attribute

c# - .NET Core 程序集搜索顺序

c# - 我应该如何命名数据库包装器对象?

c# - 扩展 SNMP 代理 C#

c# winforms 如何旋转图像(但不围绕其中心旋转)

.net - Spa 模板 .net 核心 2.0 Angular 4 webpack 2 使用 sass 不引导 4 css

C#:使用 Winforms 关闭 SerialPort 的正确方法

c# - 图表点和画线

c# - 为什么我没有得到额外的消息框?

c# - 为 OwnesOne 导航属性创建索引