本文转载:http://www.cnblogs.com/Hdsome/archive/2011/10/28/2227712.html

提出问题:在收货系统中,常常要用到扫描枪扫描条码输入到TextBox,当条码无法扫描时,需要手工输入。如果是扫描枪输入时,我们将自动去判读条码,而手工输入时,最终需要加按回车键确认后判读条码。这时候我们就要判断输入设备是手工还是扫描枪。

尝试的方法:

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 ;
        }

至此, 问题解决,希望大家有更好的方法留言交流

本文在实际项目中使用;

DateTime dtStart = DateTime.Now;
this.txtCustomerNo.TbKeyPress += (sender, e) =>
{
DateTime dtCurrent = DateTime.Now;
Console.WriteLine("dtStart:" + dtStart.ToString());
Console.WriteLine("dtCurrent:" + dtCurrent.ToString());
TimeSpan ts = dtCurrent.Subtract(dtStart);
if (ts.Milliseconds < 35)
{
IsScanningGunAuto = true;
Console.WriteLine("扫描枪;ts:" + ts.Milliseconds.ToString() + " Text:" + this.txtCustomerNo.Text.Trim());
}
else
{
IsScanningGunAuto = false;
Console.WriteLine("手动输入;ts:" + ts.Milliseconds.ToString() + " Text:" + this.txtCustomerNo.Text.Trim());
}
dtStart = dtCurrent;
Console.WriteLine("----------------------------------------");
};
this.txtCustomerNo.TbKeyDown += (sender, e) =>
{
if (this.txtCustomerNo.TbFocused)
{ if (e.KeyCode == Keys.Enter)
{
if (IsScanningGunAuto)
ScanningGunAuto();
//else
//btnSeach_Click(null, null);
//this.txtCustomerName.Focus();
} } };

  

WinForm中TextBox 中判断扫描枪输入与键盘输入的更多相关文章

  1. 【转】C#中判断扫描枪输入与键盘输入

    提出问题:在收货系统中,常常要用到扫描枪扫描条码输入到TextBox,当条码无法扫描时,需要手工输入.如果是扫描枪输入时,我们将自动去判读条码,而手工输入时,最终需要加按回车键确认后判读条码.这时候我 ...

  2. C# Winform中无焦点状态下获取键盘输入或者USB扫描枪数据

    类文件: C#类文件 using System; using System.Collections.Generic; using System.Text; using System.Runtime.I ...

  3. 获取键盘输入或者USB扫描枪数据

    /// <summary> /// 获取键盘输入或者USB扫描枪数据 可以是没有焦点 应为使用的是全局钩子 /// USB扫描枪 是模拟键盘按下 /// 这里主要处理扫描枪的值,手动输入的 ...

  4. WinForm 无焦点获取键盘输入

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  5. 使用BIOS进行键盘输入和磁盘读写

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  6. C# 计算器 如果设置键盘输入的监听事件

    这个事情困扰了我好久,之前java写的计算器程序可以正常运行了,但是因为打包问题(尝试过多次,感觉好麻烦,个人比较崇尚“点子”,注重创新,思来想去之后,决定试试C#模仿java再写一遍),想要用C#模 ...

  7. 请问在C#的Winform下如何用正则表达式限制用户只能在textBox中输入18位的身份证号码。

    请问在C#的Winform下如何用正则表达式限制用户只能在textBox中输入18位的身份证号码. 2013-06-18 11:07会飞的鱼儿18 | 分类:C#/.NET | 浏览101次 不能有空 ...

  8. C# textbox中输入时加限制条件 // C#Winform下限制TextBox只能输入数字 // 才疏学浅(TextBox 小数点不能在首位+只能输入数字)

    textbox中输入时加限制条件 分类: C# winform2008-08-26 08:30 306人阅读 评论(0) 收藏 举报 textbox正则表达式object 1.用正则表达式! 2.使用 ...

  9. C#的winform中控制TextBox中只能输入数字

    C#的winform中控制TextBox中只能输入数字 private void textBox3_KeyPress(object sender, System.Windows.Forms.KeyPr ...

随机推荐

  1. php模拟POST请求提交数据

    php模拟POST请求提交数据 1.基于fsockopen function phppost00($jsonString){ $URL='https://www.jy.com/phppostok.ph ...

  2. python【第十五篇】JavaScript

    大纲 1 简介 2 存在形式 3 放置位置 4 变量 5 注释 6 数据类型 7 时间处理 8 语句和异常 9 函数及其作用域 1.JS简介 JavaScript是世界上最流行的脚本语言,因为你在电脑 ...

  3. 为何要fork()两次来避免产生僵尸进程??

    最近安装书上说的,开始搞多进程了..看到了一个好帖子,学习学习 http://blog.sina.com.cn/s/blog_9f1496990100y420.html 首先我们要明白,为什么要避免僵 ...

  4. MySQL在创建存储过程的时候,语法正确却提示You have an error in your SQL syntax

    我在使用MySQL工具编写MySQL存储过程的时候,明明语法正确,但是却一直提示You have an error in your SQL syntax. 比如下面一段代码 CREATE PROCED ...

  5. Hadoop 2.6.0编译on mac

    花了一个晚上的时间弄了下hadoop的编译环境,碰到些错误,这里保存下. 需要编译Hadoop,不但需要安装Maven,还需要安装protobuf 安装Maven 下载:apache-maven-3. ...

  6. Hibernate中的一对多关系详解(2)

    一对多的关系:例如,部门对员工,一个部门可以有多个员工 多对一的关系:例如,员工对部门,多个员工属于一个部门,并且每个员工只能属于一个部门 那么一对多.多对一在数据库中的是怎样表示的呢?好多话都不说了 ...

  7. Jamie's Contact Groups

    poj2289:http://poj.org/problem?id=2289 题意:给定一个规模为n的名单,要将名单中的人归到m个组中,给出每个人可能的分组号,需要确定一种分配方案,是的最大规模的组最 ...

  8. Linux iconv使用

    iconv [选项]文件 输入/输出格式规范:-f, --from-code=名称 原始文本编码-t, --to-code=名称 输出编码 信息:-l, --list 列举所有已知的字符集 输出控制: ...

  9. EntityFramework 异常 -- An entity object cannot be referenced by multiple instances of IEntityChangeTracker

    问题      在调用 DbSet 的 Attach()  方法时(与将 Entity 设置为 EntityState.Unchanged 状态等价)报告以下错误:      An entity ob ...

  10. MFS学习总结

    MFS学习总结 MFS概述.特性和新版改进 MFS 工作原理和设计架构 MFS的安装.部署.配置 MFS的高级特性 MFS的性能测试 MFS集群的维护 MFS的常见问题和建议对策 一.MFS概述.特性 ...