2014-09-19 157 views
0

我正在製作一個基本的Windows窗體應用程序。其中一種形式只有一個文本框和按鈕。除此之外,我在sql server上有一個數據庫。在我的數據庫中,有一個表(由ProductID,productName,NoOfStock和Price組成)。條碼掃描

的ProductID的是那些屬於現實世界的產品,如handcream,糖果等所有條碼..

當我通過從如ComboBox其他控件的條形碼讓我的產品的詳細信息,也沒有任何問題。但是, **問題是或我的問題是**,當我掃描我的條形碼時,我可以直接在我的文本框中獲取它。有條形碼後,我想在消息框或標籤上看到產品名稱(產品名稱),而不點擊任何按鈕或輸入等。

換句話說,我希望我的系統像超市一樣工作。員工不要求點擊屏幕上任何東西,只是掃描條形碼,並立即獲得詳細信息。*

我認爲它與事件相關的,但哪一個?

+0

'TextBox.TextChanged'可能是你在找什麼 – DrCopyPaste 2014-09-19 17:54:34

+0

僅供參考,語言的名稱是「C#」,而不是「升C」。另外,我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 – 2014-09-19 18:12:01

+0

你如何閱讀條形碼?通過獨立的API或datawedge? – 2014-09-19 18:37:47

回答

0

您可能希望在掃描條形碼時觸發文本框上的TextChanged事件。

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.textchanged(v=vs.110).aspx

+0

我試過這個,但它沒有奏效。當我掃描條形碼時,只有第一個數字寫入文本框,而不是剩餘的數字。我認爲原因是,因爲我使用了一個textchanged事件,程序不會等待條形碼上的數字。當它獲得第一位數字時,它會對它起作用。 – ozisak 2014-09-19 18:15:52

+0

您必須使用計時器(請參閱http://msdn.microsoft.com/en-us/library/system.windows.forms.timer%28v=vs.110%29.aspx)。條形碼掃描器不會一次傳送「整個」號碼,而是一個接一個地傳送。例如。您掃描一個編號爲1234的條形碼,掃描儀將首先傳送數字1,然後是2,然後是3,依此類推。所以你必須等一下,直到整個號碼被轉移。你可以用計時器來實現這一點。 – hash 2014-09-19 18:27:11

+0

@ozisak,條形碼是一個固定的數字,對嗎?只有數字的長度實際上是完整的條碼長度,您纔可以採取行動。 – cDima 2014-09-19 18:58:20

0

根據不同的品牌和您的條形碼掃描儀的模型,平時也有用來表示終止碼條碼的頁面,如圖here on this SuperUser question指導手冊。

你需要做的是找到這個頁面,並對其做輸入條碼後,計劃你的條碼掃描器自動TAB或CR。一旦你這樣做了,那麼你可以使用TextChanged事件來檢測你的終結器(TAB或CR)代碼是否已經通過,然後你就可以處理它!

如果您選擇TAB作爲終結符,那麼您可以簡單地處理Leave事件,因爲它會自動跳出文本框,從而從文本框中留下焦點。

+0

是的,這是一種做法,但是從OP的問題與超市中的大規模掃描相比,離開文本框可能太耗費時間。 – DrCopyPaste 2014-09-20 11:35:16

1

我的第一個猜測也是使用TextBox.TextChanged -Event,但是閱讀您的意見不起作用,現在我想到了它,這是有道理的。 大多數掃描儀「只是」從他們所連接的計算機的角度來看,就像一個鍵盤一樣工作(所以他們一個接一個地發送密鑰......)。並且(正如icemanind指出的那樣)大多數條碼掃描器被(或可以)配置爲通過一些預先配置的鍵終止它們的輸入(在大多數情況下,它是輸入標籤,但是你應該能夠容易地發現了尋找到手動或只是看什麼鑰匙進來,當你掃描)

所以,你應該做的,而不是被訂閱的KeyPress-Event(我猜的keydown也可以工作,但我要說掃描器不太可能發送一個終止密鑰,然後按住它)

然後你切ck在這種情況下是否發送了終止密鑰,如果是這樣,您檢查文本框的文本內容並嘗試查找產品數據庫中的數據。