c# winform 中怎样让一个文本框可以用扫描枪输入,而不能用键盘输入
尝试的方法:
1.将TextBox属性设为ReadOnly=true。结果:无法输入。
2.在TextBox的KeyPress事件中设置属性e.handle=true。结果:扫描枪输入时也会触发KeyPress事件,因此也不能输入。
3.在TextBox的ValueChanged事件中判断结果。结果:扫描枪也是一个一个字符输入,不是一次性将整个条码输入。
思考:扫描枪其实在输入上与键盘完全相似。但是人工输入和扫描设备输入的区别在于,扫描设备输入速度比较快而且时间间隔比较平均。
实验:
解决方法:
Private DateTime _dt = DateTime.Now; //定义一个成员函数用于保存每次的时间点
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
DateTime tempDt = DateTime.Now; //保存按键按下时刻的时间点
TimeSpan ts = tempDt .Subtract(_dt); //获取时间间隔
if (ts.Milliseconds > 50) //判断时间间隔,如果时间间隔大于50毫秒,则将TextBox清空
textBox1.Text = "";
dt = tempDt ;
}
至此, 问题解决。
扫描枪是完全模拟键盘的设备,如果屏蔽按键的话,则将扫描枪一起屏蔽了。所以,建议用串口扫描枪。
设计思路:
文本框KEYPRESS事件 。 第1个字符输入到第N个字符,不能超过某个时刻(例如4个字符以上就超过1秒),如果超过1秒文本清空。
还有你得考虑到扫描码不清晰,需要手工输入的情况。
事实上,如果是条码,很可能会出现这种情况。二维码没办法。