2011-01-06 68 views
0

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

当我执行文本更改事件时,只要将条形码的第一个字符输入到文本框中就会触发。 (即如果条形码是123r54122,则在文本框中以'1'开始)。

条形码或标准长度没有一致的结束字符。那么当我读完整个字符串的时候,我会如何解决这个问题?

回答

4

您可以验证文本的长度(我认为它是恒定的条形码)。 例如订阅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(); 
} 
+0

这些都是定制的条形码,所以没有固定的长度 – MichaelMcCabe 2011-01-06 12:09:49

+0

那么你应该 1)等待来自条形码阅读器(例如换行) 2一些自定义字符),等待条形码阅读器 3的一些事件)定义了新的性格有些超时如果超时已过,但没有添加新字符,则会出现并引发扫描事件。例如。在收到textchanged事件后启动计时器,存储当前的日期时间并在计时器中验证文本是否发生了变化。 – 2011-01-06 12:14:39

+0

完美。很棒! – MichaelMcCabe 2011-01-06 13:05:26

0

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

编辑;如果您在收到信息时将信息写入文本框,然后调用文本框事件..为什么还要将它写入文本框?只要直接确定它是完整的条形码即可致电

1

我所使用的条形码扫描仪在条形码字符串的末尾添加了换行符(返回/输入)。这取决于它是如何配置的设置文本框接受退货(AcceptReturn为true),然后像做

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

唯一的条码扫描器我使用(从林迪一个USB模式)可以追加一回与否。通过扫描扫描仪附带的小册子上打印的特殊控制条码,实现模式之间的切换。

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