2011-04-12 57 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個字符)我們仍然會進行適當的查找。

相關問題