在WinForm C#應用程序中,我有一個Barcode_textbox。在TextChanged
事件中,我有一個SQL查詢來檢查數據庫中的TextBox.Text值,它是條形碼。問題在於,對於每個輸入的數字,SQL查詢將被解僱,因此如果長度爲13的條形碼將在數據庫中進行13次檢查,並且它非常慢。改進文本框C中的條形碼搜索#
那麼,什麼是TextBox事件,只有當用戶停止在文本框(或條形碼閱讀器的位置讀取)中寫入時觸發,或什麼是檢查數據庫中條形碼的最佳解決方案。請注意,細菌的長度不同
在WinForm C#應用程序中,我有一個Barcode_textbox。在TextChanged
事件中,我有一個SQL查詢來檢查數據庫中的TextBox.Text值,它是條形碼。問題在於,對於每個輸入的數字,SQL查詢將被解僱,因此如果長度爲13的條形碼將在數據庫中進行13次檢查,並且它非常慢。改進文本框C中的條形碼搜索#
那麼,什麼是TextBox事件,只有當用戶停止在文本框(或條形碼閱讀器的位置讀取)中寫入時觸發,或什麼是檢查數據庫中條形碼的最佳解決方案。請注意,細菌的長度不同
我記得我是如何成功的。
我把計時器控制放在我的應用程序中,間隔一秒(1000毫秒)。然後我將Form.KeyPreview屬性設置爲True。
在Form Key Press事件中,我存儲了關鍵筆劃。在Timer.Tick事件中,檢查記錄的擊鍵長度是否超過12個字符。
然後開始調用SQL一次。當您成功返回記錄(或者如果文本框包含大於20個字符的字符),請清除存儲的按鍵筆劃。
另外一個是取消定時器並在textchanged事件中啓動定時器。這樣計時器將在用戶停止輸入後1秒鐘內觸發。這當然意味着用戶必須每秒輸入至少一個字符才能激發sql查詢。 – Patrick 2013-04-09 23:00:18
爲什麼爲什麼?!定時器是這樣一個可怕的解決方案。 – 2013-04-09 23:13:54
因爲它是VB6。我想放棄使用Timer,這裏的珍珠是Form.KeyPreview的伎倆。 – 2013-04-09 23:21:01
您可以使用驗證事件來檢查文本框的內容。
您的用戶將被要求按TAB鍵來改變當前焦點從文本框到下一個控制的TabOrder以下和驗證事件將被觸發
private void textBox_BarCode_Validating(object sender, CancelEventArgs e)
{
// Code to check the barcode on the SQL database....
if(!ValidBarCode(textBox1.Text))
{
// Cancel the event and select the text to be corrected by the user.
e.Cancel = true;
textBox1.Select(0, textBox1.Text.Length);
}
}
假設未來control是使用插入的條形碼(Add)(或用於插入條形碼描述的項目的數量的文本框)執行某些操作的命令。一段時間後,所有的操作變成了非常自然的數據輸入處理
如何做查詢異步?
如果您不能或不想一個簡單的骯髒的解決方案,那麼我只想堅持計時器
以這種方式使用定時器,當用戶停止在你的文本框爲給定的小時間打字說只需1秒然後從數據庫中獲取數據...
此外,您可以對用戶使用計數器鍵入的字符進行檢查,以便當它超過最小值(您的密鑰可以達到的最小尺寸)時獲取數據...將節省很多時間
計時器很棒,謝謝 – fadd 2013-04-11 07:53:29
定時器是一個可怕的解決方案。
使用TextBox
的KeyUp
事件並檢查回車。大多數條形碼掃描儀在代碼後提交回車符。如果默認情況下他們不這樣做,他們會附帶條形碼來配置它。
您可以通過打開記事本並在條形碼後面掃描條形碼來進行測試。每一個都將在一個新的線上。
添加一個帶有「檢查有效性」文本的按鈕不是一個選項嗎? – Steve 2013-04-09 22:51:55
除了史蒂夫的建議,你可以聽輸入鍵? – Patrick 2013-04-09 22:53:52
這不是最優的,想象這個軟件在超市裏。每次閱讀條形碼閱讀器時,點擊按鈕將非常耗時! – fadd 2013-04-09 22:54:19