Texbox输入,禁用键盘,保持条形码扫描器
我已经使用文本框制作了Windows窗体应用程序。我将强制用户使用条形码扫描器,因此应禁用键盘输入。 KeyPressed事件不起作用,因为也禁止条形码扫描器的输入。Texbox输入,禁用键盘,保持条形码扫描器
我想也许我可以在TextChanged事件上设置一个计时器,但我真的不知道它是如何工作的。
有人一个好主意吗?
根据您的描述,我假设您的条码扫描器是一款HID条码扫描器。如果是这样,这里没有简单的答案,因为条形码扫描器的功能与键盘完全一样。禁用键盘输入将禁用条形码扫描仪。
我以前做过这一点,有几个解决方案,我所知道的:
- 使用条形码扫描仪是不是HID条形码扫描仪。例如:Serial,或者类似的东西。
- 配置条形码扫描器在条码扫描的开始和结束时发送特殊字符。 (如果您有针对特定型号条形码扫描仪的手册,则可以执行此操作。)编写您的KeyPressed事件以侦听这些特殊字符,作为从条形码扫描仪获取数据的信号。当它看到它们时,启用和禁用文本框。
- 使用Windows API调用与条形码扫描器直接通信。这需要了解条形码扫描器的VID和PID,以及一些API的详细知识,如GetRawInputDeviceInfo,GetRawInputData和RegisterRawInputDevices。这是非常强大的,因为您可以从应用程序的任何位置接收条形码输入,但它非常复杂。
但是,有一点需要注意:您可能根本不想禁用文本框。如果条码损坏,扫描仪无法读取,会怎么样?您始终希望用户能够手动输入条形码。下次您通过商店的收银机时,请注意总有一种方法可以手动输入条形码。
谢谢你,另一个条码扫描器不是一个选项。是否可以用计时器或其他东西?条形码扫描仪的输入比人工输入快得多。 – Marten
这取决于条形码扫描仪和人。我见过慢条码扫描仪和快速人类。我建议避免基于时间的解决方案。最终,这里的根本问题是条形码扫描仪的界面很糟糕。他们假装他们是键盘,并没有提供有用的API来访问它们。 –
您应该可以将文本框的启用属性设置为false,然后使用条码扫描器提供的任何API挂接到扫描事件并将文本框的值设置为该扫描的结果。 –
希望它有帮助http://nicholas.piasecki.name/blog/2009/02/distinguishing-barcode-scanners-from-the-keyboard-in-winforms/ – Steve