wpf textbox 扫描枪 扫入条码 datagrid录入信息

来源:互联网 发布:淘宝抢货 编辑:程序博客网 时间:2024/04/28 17:49

这个问题困扰我一天,我总是在扫描枪触发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了!(当然其中也曾尝试过很多的方法)!

原创粉丝点击