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

                }

            };

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏木宛城主

SharePoint下在Feature中动态Register/Remove HttpModule

在SharePoint开发时,你会遇到这样一个问题,Global.asax去哪儿?怎样添加一个Global.asax?怎样在Application_Start这...

22270
来自专栏一个爱瞎折腾的程序猿

asp.net core权限模块的快速构建

此处的自定义的特性标记不能继承Attribute,因无法在AdminAuthorizeAttribute中的上下文filterContext.Filters中获...

50710
来自专栏码农阿宇

.Net Core使用Redis的一个入门简单Demo

本例子讲述一个在.Net core环境中对Redis数据库进行增删改查操作。 首先,要安装好Redis数据库,至于怎么安装,本文不再赘述,可以自行百度,有很...

28450
来自专栏mwangblog

python类(三)

12730
来自专栏恰童鞋骚年

ASP.Net请求处理机制初步探索之旅 - Part 3 管道

开篇:上一篇我们了解了一个ASP.Net页面请求的核心处理入口,它经历了三个重要的入口,分别是:ISAPIRuntime.ProcessRequest()、Ht...

16720
来自专栏晓晨的专栏

.NET Core 实现 Redis 批量查询指定格式的Key

Redis 作为当前最流行的内存型 NoSQL 数据库,被许多公司所使用,作为分布式缓存。我们在实际使用中一般都会为 key 带上指定的前缀或者其他定义的格式。...

11610
来自专栏木宛城主

ASP.NET那点不为人知的事(三)

有了以下的知识: ASP.NET那点不为人知的事(一) ASP.NET那点不为人知的事(二) 想必开发一个小型服务器以不是问题了,功能补复杂,能够响应...

21690
来自专栏熊二哥

快速入门系列--WCF--03RESTFUL服务与示例

之前介绍了基于SOAP的Web服务,接下来将介绍基于REST的轻量级的Web服务。 ? REST(Representational State Transfe...

21870
来自专栏GreenLeaves

WCF系列教程之WCF中的会话

本文参考自http://www.cnblogs.com/wangweimutou/p/4516224.html,纯属读书笔记,加深记忆 一、WCF会话简介 1、...

21050
来自专栏张善友的专栏

使用LogParser分析日志

系统运维,少不了分析系统日志,微软有个工具Log Parser可以帮助你分析日志。它功能强大,使用简单,可以分析基于文本的日志文件、XML 文件、CSV(逗号分...

51170

扫码关注云+社区

领取腾讯云代金券