我有一个条形码扫描器,它读取条形码的字符串并显示在活动文本框中。 我遇到的问题是,我需要在扫描后立即使用该条形码(没有用户“确定”按钮)。
当我执行Text Changed事件时,只要条形码的第一个字符输入文本框,它就会触发。 (即如果条形码是123r54122,它会在文本框中以“1”激发。)
条形码或标准长度没有一致的结束字符。那么,当读入WHOLE字符串时,我将如何开始触发方法?
答案 0 :(得分: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();
}
答案 1 :(得分:1)
我使用的条形码扫描仪在条形码字符串末尾添加换行符(返回/输入)。将文本框设置为接受return(AcceptReturn为true),然后执行类似
的操作private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Return)
doSomething();
}
答案 2 :(得分:1)
我使用的唯一条形码扫描器(Lindy的USB型号)可以根据配置方式添加或不返回。通过扫描随扫描仪提供的小册子上打印的特殊控制条形码来实现模式之间的切换。
我不熟悉C#但是在Java中你可以侦听ActionEvent而不是TextEvent来检测何时按下return而不是键入的字符。如果它在C#中可用,这将是dandan78建议的一个更简单的替代方法。
答案 3 :(得分:0)
扫描仪是否发送信号表明已完成读取信息?如果它没有标准长度的结束字符肯定会。 无论如何,您应该将值读入内存,然后立即设置文本框文本,而不是在收到每个字符时插入。
编辑;如果您在收到信息时将信息写入文本框,则调用文本框事件..为什么还要将其写入文本框?只要您确定它是一个完整的条形码就可以直接调用该事件