TextBox:TextChanged事件 - 输入x字符时自动进行

时间:2011-04-12 16:09:40

标签: c# textbox textchanged

我有一个从USB扫描仪读取条形码的应用程序。我想在条形码输入特定文本框后立即进行数据库查找。

显然,我将把我的代码放在TextChanged事件处理程序中,但我有一个小问题,即读取的条形码可能是41或43个字符。问题是,我如何知道输入的代码类型。扫描仪只需将代码输入任何具有焦点的字段作为字符串 - 就像它是由键盘输入的一样 - 因此我无法查询扫描仪以确定代码长度。

到目前为止,我已经想到了两种方法:

  • 检测第一个字符,等待x.x秒,然后执行查找 - 留出足够的时间输入完整代码
  • 检测第41个字符,等待0.x秒,然后进行查找。

好的,我确信这些都能正常工作,但还有更有说服力的解决方案吗?

结论

一些有用的建议,但是Ondrej为我的场景启发了最简单的解决方案。 43个字符代码有两个固定用于所有代码的字符 - 这两个字符的存在(或不存在)意味着我知道等待这两个字符是否存在但只有41个字符存在。

我只需要确认我怀疑41个字符代码在这个特定的位置不能有这对字符 - 我很确定是这种情况。

3 个答案:

答案 0 :(得分:2)

一个选项是在读取第41个字符后执行异步查找,同时仍在UI线程中等待另外两个字符。如果您点击该条形码,您可以停止等待并显示该结果。或者,如果在查找过程中输入了第42个字符,您可以中止它并在输入第43个字符时立即开始新的查找。但是,假设没有43个字符的条形码以现有的41个字符的条形码开头。

我还会查看并查看条形码是否包含某些模式(例如:41-char代码的X为第9个字符,43-char代码不包含),并在输入时扫描。< / p>

答案 1 :(得分:1)

你可以有一个计时器,虽然没有发生过1s的变化,但是查找应该是41或43个字符长。

答案 2 :(得分:1)

我将DB查询调用包装在后台工作者类中 在TextChanged事件处理程序中,我要做的第一件事是如果后台工作者正在工作,我会取消它。然后,如果文本长度为41或43,我将在后台工作程序中处理数据库调用。

这样,如果用户点击41个字符,则会发出呼叫,如果他们输入第42个字符,则取消呼叫,但是如果他们输入43,则删除两个字符(最多返回41个字符)你'我还在做正确的查找。