2011-01-06 66 views
0

我有一個條形碼掃描器,讀取條形碼的字符串並顯示在活動文本框中。 我遇到的問題是,我需要條形碼在掃描後立即使用(無用戶「確定」按鈕)。條碼掃描器讀取文本框中的值的問題

當我執行文本更改事件時,只要將條形碼的第一個字符輸入到文本框中就會觸發。 (即如果條形碼是123r54122,則在文本框中以'1'開始)。

條形碼或標準長度沒有一致的結束字符。那麼當我讀完整個字符串的時候,我會如何解決這個問題?

回答

4

您可以驗證文本的長度(我認爲它是恆定的條形碼)。 例如訂閱TextChange事件,如果文本長度= barCodeLength,則引發Scanned事件。

如果條形碼具有可變長度的你可以嘗試這樣的事: 1)定義

private Timer _timer; 
private DateTime _lastBarCodeCharReadTime; 

2)初始化定時器

_timer = new Timer(); 
_timer.Interval = 1000; 
_timer.Tick += new EventHandler(Timer_Tick); 

3)添加處理程序

private void Timer_Tick(object sender, EventArgs e) 
{ 
    const int timeout = 1500; 
    if ((DateTime.Now - _lastBarCodeCharReadTime).Milliseconds < timeout) 
     return; 

    _timer.Stop(); 
    // raise Changed event with barcode = textBox1.Text    
} 

4)在TextChanged事件處理程序中加入這個

private void textBox1_TextChanged(object sender, EventArgs e) 
{  
    _lastBarCodeCharReadTime = DateTime.Now; 
    if (!_timer.Enabled) 
     _timer.Start(); 
} 
+0

這些都是定製的條形碼,所以沒有固定的長度 – MichaelMcCabe 2011-01-06 12:09:49

+0

那麼你應該 1)等待來自條形碼閱讀器(例如換行) 2一些自定義字符),等待條形碼閱讀器 3的一些事件)定義了新的性格有些超時如果超時已過,但沒有添加新字符,則會出現並引發掃描事件。例如。在收到textchanged事件後啓動計時器,存儲當前的日期時間並在計時器中驗證文本是否發生了變化。 – 2011-01-06 12:14:39

+0

完美。很棒! – MichaelMcCabe 2011-01-06 13:05:26

0

掃描儀不發送信號表明它已完成讀取信息嗎?如果它沒有標準的結尾字符長度,那肯定會。 無論如何,您應該將值讀入內存,然後立即設置文本框文本,而不是在接收每個字符時收集它們。

編輯;如果您在收到信息時將信息寫入文本框,然後調用文本框事件..爲什麼還要將它寫入文本框?只要直接確定它是完整的條形碼即可致電

1

我所使用的條形碼掃描儀在條形碼字符串的末尾添加了換行符(返回/輸入)。這取決於它是如何配置的設置文本框接受退貨(AcceptReturn爲true),然後像做

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == (char)Keys.Return) 
     doSomething(); 
} 
1

唯一的條碼掃描器我使用(從林迪一個USB模式)可以追加一回與否。通過掃描掃描儀附帶的小冊子上打印的特殊控制條碼,實現模式之間的切換。

我對C#並不熟悉,但在Java中,您可以偵聽ActionEvent而不是TextEvent,以檢測何時按下返回而不是鍵入字符。如果它在C#中可用,這將是dandan78建議的一個更簡單的替代方法。