wpf textbox 扫描枪 扫入条码 datagrid录入信息
2009-12-15 22:10
127 查看
这个问题困扰我一天,我总是在扫描枪触发textbox的事件里搞不准,我也没上网看看别人是怎么解决的,总是一个人在那想啊想!试过了好多的方法,今天终于给解决了!
其实我就完成像类似超市条码扫描的那种功能,扫描一个条码在datagrid录入相应的信息!
起初走过了很多误区(一直认为条码的录入只是单纯的录入条码):
误区1:通过textbox的textchange事件,以为条码时一次录入的,但是后来真当我录入时发现条码时从左到右一次被录入文本框的,从录入第一字母或是数字时就得触发一次事件,这样肯定不能执行相关的代码的,其实没用到扫描枪时,就在想如果哪天条码不清楚得手动输入怎么办?这又使我想到得用线程,我想单独开个线程,等到过了相应的时间在录入条码,但是线程方面我也用的不好、、录入后总得有个事件触发吧!没有事件触发,线程它会自动执行吗?理论上是不会的、、、即使会时间段也是不好把握的。其实我在textchange里面线程休眠了一段时间,但是录入第一字母或是数字的时候,事件已经被触发、、、所以这个事件最早的被out了!
误区2:通过textbox的lostfouce事件,这个事件貌似可以解决上面的总总问题,但是每次失去焦点时候就得要有个控件来得到焦点,而且录入完成后又得得到焦点,总觉得导致界面不很人性化,而且我一直以为条码的录入只是单纯的录入条码,根本就不可能在做什么、、
今天去公司,什么也没做,就把条码扫描仪插到了自己的电脑上,毕竟找问题得从核心找起,后来上网才知道然来,条码扫描仪是可以设置的,公司网点上用的扫描仪都是以enter结尾。
有了这个认识一切over了 ,后来我用到了keypress事件,只需判断最后的enter一切都ok了!起初是想用keypress事件的,但是wpftextbox并没有keypress事件,而且keydown里面我找了半天也没找到keycode,如是我写了个测试的窗体,发现在textbox按回车时返回的是Return,我想有这就足够了吧!用e.key.toString().equals("Return")然后做相应的操作、、、
而后datagrid动态添加一条信息的时候发现了一个问题,我起初的思路是判断datagrid是否有数据,如果是第一次创建一个list然后将相应的信息封装到一个实体类,加入到list中赋给source源,第二次的时候List<T> list=(List<T>)this.datagrid.itemSource;然后list.add(T),this.datagrid.itemsource=list;理论上没错的,结果报异常了。其实仔细想想异常的信息,发现是有问题的,当你第二次赋值的时候,datagrid的source已经存在了source程序不可能自动跟你覆盖,所以你得清空source源,从新赋一次值就ok了!(当然其中也曾尝试过很多的方法)!
其实我就完成像类似超市条码扫描的那种功能,扫描一个条码在datagrid录入相应的信息!
起初走过了很多误区(一直认为条码的录入只是单纯的录入条码):
误区1:通过textbox的textchange事件,以为条码时一次录入的,但是后来真当我录入时发现条码时从左到右一次被录入文本框的,从录入第一字母或是数字时就得触发一次事件,这样肯定不能执行相关的代码的,其实没用到扫描枪时,就在想如果哪天条码不清楚得手动输入怎么办?这又使我想到得用线程,我想单独开个线程,等到过了相应的时间在录入条码,但是线程方面我也用的不好、、录入后总得有个事件触发吧!没有事件触发,线程它会自动执行吗?理论上是不会的、、、即使会时间段也是不好把握的。其实我在textchange里面线程休眠了一段时间,但是录入第一字母或是数字的时候,事件已经被触发、、、所以这个事件最早的被out了!
误区2:通过textbox的lostfouce事件,这个事件貌似可以解决上面的总总问题,但是每次失去焦点时候就得要有个控件来得到焦点,而且录入完成后又得得到焦点,总觉得导致界面不很人性化,而且我一直以为条码的录入只是单纯的录入条码,根本就不可能在做什么、、
今天去公司,什么也没做,就把条码扫描仪插到了自己的电脑上,毕竟找问题得从核心找起,后来上网才知道然来,条码扫描仪是可以设置的,公司网点上用的扫描仪都是以enter结尾。
有了这个认识一切over了 ,后来我用到了keypress事件,只需判断最后的enter一切都ok了!起初是想用keypress事件的,但是wpftextbox并没有keypress事件,而且keydown里面我找了半天也没找到keycode,如是我写了个测试的窗体,发现在textbox按回车时返回的是Return,我想有这就足够了吧!用e.key.toString().equals("Return")然后做相应的操作、、、
而后datagrid动态添加一条信息的时候发现了一个问题,我起初的思路是判断datagrid是否有数据,如果是第一次创建一个list然后将相应的信息封装到一个实体类,加入到list中赋给source源,第二次的时候List<T> list=(List<T>)this.datagrid.itemSource;然后list.add(T),this.datagrid.itemsource=list;理论上没错的,结果报异常了。其实仔细想想异常的信息,发现是有问题的,当你第二次赋值的时候,datagrid的source已经存在了source程序不可能自动跟你覆盖,所以你得清空source源,从新赋一次值就ok了!(当然其中也曾尝试过很多的方法)!
相关文章推荐
- wpf textbox 扫描枪 扫入条码 datagrid录入信息
- 从一个表格文件中录入信息,进行计算后,在文件中输出这个表格
- 为DataGrid自定义分页添加自定义导航和分页信息
- Java基础知识强化之集合框架笔记49:键盘录入5个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台
- 框架 day52 BOS项目练习(业务受理功能,快速录入工作单{datagrid数据表格编辑功能使用})
- 题目:北京市二手房交易信息录入程序
- 20170727 JAVA练习:会员信息录入
- EasyUI Datagrid 列属性函数中如何获取当前列信息
- 在asp.net中实现删除DataGrid的某条记录时的提示信息
- Vue指令练习实例-学生信息录入
- 录入商品信息案例_总结_1120
- 实现学生信息录入的动态长度控制(链表)
- 开发各种信息管理系统的标准演示数据都帮你整理好了,少了录入演示\测试\模拟数据的烦恼了[提供下载]
- 设计网页录入信息与自己定义server数据接收
- 号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。其中“出生日期”定义为一个“日期”类内嵌子对象。用成员函数实现对人员信息的录入和显示。要求包括:构造函数和析构函数、拷贝构造函
- 建立第一个winForm应用——员工信息录入
- 键盘录入多名学生的信息: 格式:姓名,数学成绩,语文成绩,英文成绩,按总分由高到低 将学生的信息进行排列到文件里
- C# winform 中如何设定让DATAGRID不绑定数据,而只做录入用
- 36进制的顺序递增(主要用来标识条码信息)
- Silverlight实用窍门系列:48.DataGrid行详细信息的绑定--DataGrid.RowDetailsTemplate【附带实例源码】