2011-04-12 55 views
1

我有一个应用程序,在从USB扫描条形码的读取。只要在特定的文本框中输入条形码,我就想进行数据库查找。文本框:TextChanged事件 - 当X字符已经进入Autovalidating

很显然,我打算把我的代码在TextChanged事件处理程序,但我有条形码被读取一个小问题,可能是因为存在41或43个字符。问题是,我怎么知道输入哪种类型的代码。扫描器只需将代码输入到任何字段作为字符串的焦点 - 就好像它是通过键盘输入的 - 所以我无法查询扫描器以确定代码长度。

我想到了两种方法至今:

  • 检测第一个字符,等待XX秒,然后做我查找 - 留出足够的时间,要输入一个完整的代码
  • 检测第41性格,等待0.x秒,然后做我的查询。

好吧,我确定这些都可以正常工作,但是还有更多雄辩的解决方案吗?

结论

一些有益的建议,但是的Ondrej激发了我的方案最简单的解决方案。这43个字符代码有两个字符,这两个字符对于所有代码都是固定的 - 这两个字符的存在(或不存在)意味着如果存在这两个字符,我知道要等待,但只有41个字符存在。

我只需要确认我的怀疑,41个字符代码不能有这种对人物,在这个特殊的位置 - 这我相当肯定是这样的。

回答

2

一种选择是第41个字符被读取之后执行异步查找,同时还在等待UI线程中的两个字符。如果您遇到该条形码,您可以停止等待并显示该结果。或者,如果在查找过程中输入第42个字符,则可以中止它,并在输入第43个字符时立即开始新的查找。但是,假定没有43个字符的条形码以现有的41个字符的条形码开始。

我还会看看条形码是否包含某些图案(例如:41个字符代码的第9个字符为X,43个字符代码没有),并在输入时扫描它。

+0

你的第二个建议是迄今为止最简单 - 我不相信我以前没有想到它。 43个字符的代码实际上有两个字符不会改变。 – CJM 2011-04-12 16:35:30

1

你可以有一个定时器,而没有改变已发生的发言权,以1秒,那么请查找它应该是41或43个字符长。

1

我包裹在后台工作类DB查找调用。
在TextChanged事件处理程序上,我要做的第一件事是如果backgroundworker正在工作,我会取消它。那么如果文本长度是41或43,我会在后台处理程序中处理数据库调用。

这样,如果用户击中41个字符,则发生呼叫,如果他们键入第42个字符,则呼叫被取消,但如果他们键入43,则删除两个字符(回到41个字符)我们仍然会进行适当的查找。

相关问题