日期:2014-05-18  浏览次数:20993 次

关于textbox 的触发事件textBox2_TextChanged
关于textbox 的触发事件textBox2_TextChanged

我现在textbox从扫描枪获得一串数据(例如:123456),

可是textBox2_TextChanged 把这次串数据(例如:123456),看作是从键盘输入了6个字符(分6次来处理,即textBox2_TextChanged会响应6次)



如何让textBox2_TextChanged 获得数据后,只响应一次

或者有没有其他方法: 使得textbox获得扫描枪数据后,立即触发一个事件


------解决方案--------------------
我印象里扫描枪最后会送出一个回车的,你可以试着在KeyPress事件里捕捉回车,而不是在TextChanged里处理。
如果没有回车,但又能够确定编码的长度,可以根据文本框内容的长度来确定是否完整。
如果连长度都没有办法确定,那就只能靠计时器了。
------解决方案--------------------
e.keychar==13

------解决方案--------------------
e.KEYS==KEYS.Enter
------解决方案--------------------
不一定是Enter。不同的条码扫描设备的出厂设置不同,但是都可以通过用它扫描厂家给你的设置手册来设置后缀。例如你可以设置后缀为"x",或者甚至是两个不可见的ascii码。然后在你的textBox2_TextChanged事件中做判断。例如你可以首先设计一个事件例如
C# code
public event EventHandler ScannerTextChanged;

private void textBox2_TextChanged(object sender, EventArgs e)
{
    if(textBox2.EndWith("x")
    {
        textBox2.Text= textBox2.Text.Substring(0, textBox2.Text.Length-1);
        if(ScannerTextChanged!=null)
            ScannerTextChanged(this,null);
    }
}