当前位置: 首页 > news >正文

WinForm中TextBox 中判断扫描枪输入与键盘输入

本文转载: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();
                    }

                }

            };

  

转载于:https://www.cnblogs.com/51net/p/3863620.html

相关文章:

  • 树莓派用上kodexplorer也能玩成私有网盘
  • 编写HTML和CSS几点心得
  • 常见高并发案例
  • HDU 1087 Super Jumping! Jumping! Jumping!
  • 一篇文章,教你学会Git
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • mac jdbc连接mysql
  • Linux运维之--LVS、Nginx、HAproxy有什么区别?
  • LFS,编译自己的Linux系统 - 编译临时系统
  • [BZOJ1877][SDOI2009]晨跑[最大流+费用流]
  • 构造字符串 之 hdu 4850 Wow! Such String!
  • Nginx负载均衡demo
  • Mysql 字符串截取
  • Go语言的序列化与反序列化(gob)
  • SqlServer将表中数据复制到另一张表
  • eclipse(luna)创建web工程
  • ES6之路之模块详解
  • Git同步原始仓库到Fork仓库中
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Invalidate和postInvalidate的区别
  • Java IO学习笔记一
  • JAVA_NIO系列——Channel和Buffer详解
  • JavaScript设计模式与开发实践系列之策略模式
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • uva 10370 Above Average
  • Webpack 4 学习01(基础配置)
  • 机器学习中为什么要做归一化normalization
  • ------- 计算机网络基础
  • 解析 Webpack中import、require、按需加载的执行过程
  • 码农张的Bug人生 - 见面之礼
  • 前端技术周刊 2019-02-11 Serverless
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 区块链共识机制优缺点对比都是什么
  • 三栏布局总结
  • 我看到的前端
  • 学习Vue.js的五个小例子
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • #if和#ifdef区别
  • #NOIP 2014# day.1 T2 联合权值
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (03)光刻——半导体电路的绘制
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (C语言)球球大作战
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)大型网站架构演变和知识体系
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例