条形码扫描仪将值读入文本框的问题

我有一个条形码扫描仪,它读取条形码的字符串并显示在活动文本框中。 我遇到的问题是,我需要在扫描后立即使用该条形码(没有用户“确定”按钮)。

当我执行Text Changed事件时,只要条形码的第一个字符输入文本框,它就会触发。 (即如果条形码为123r54122,则在文本框中以“1”触发)。

条形码或标准长度没有一致的结束字符。 那么当读入WHOLE字符串时,我将如何开始触发方法?

您可以validation文本长度(我认为条形码是常量)。 例如,订阅TextChange事件,如果文本长度= barCodeLength,则引发Scanned事件。

如果条形码具有可变长度,您可以尝试这样的事情:1)定义

private Timer _timer; private DateTime _lastBarCodeCharReadTime; 

2)初始化计时器

 _timer = new Timer(); _timer.Interval = 1000; _timer.Tick += new EventHandler(Timer_Tick); 

3)添加处理程序

 private void Timer_Tick(object sender, EventArgs e) { const int timeout = 1500; if ((DateTime.Now - _lastBarCodeCharReadTime).Milliseconds < timeout) return; _timer.Stop(); // raise Changed event with barcode = textBox1.Text } 

4)在TextChanged事件处理程序中添加此项

 private void textBox1_TextChanged(object sender, EventArgs e) { _lastBarCodeCharReadTime = DateTime.Now; if (!_timer.Enabled) _timer.Start(); } 

我使用的条形码扫描仪在条形码字符串末尾添加换行符(返回/输入)。 将文本框设置为接受return(AcceptReturn为true),然后执行类似的操作

 private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)Keys.Return) doSomething(); } 

我使用的唯一条形码扫描仪(Lindy的USB型号)可以根据其配置方式添加或不返回。 通过扫描打印在随扫描仪提供的小册子上的特殊控制条形码来实现模式之间的切换。

我不熟悉C#但是在Java中你可以侦听ActionEvent而不是TextEvent来检测何时按下return而不是键入的字符。 如果它在C#中可用,这将是dandan78建议的一个更简单的替代方案。

扫描仪是否没有发出信号表明它已完成读取信息? 如果它没有标准长度的结束字符肯定会。 无论如何,您应该将值读入内存,然后立即设置文本框文本,而不是在收到每个字符时插入它们。

编辑; 如果您在收到信息时将信息写入文本框,则调用文本框事件..为什么还要将其写入文本框? 只要您确定它是一个完整的条形码,就直接调用该事件