我有一個條形碼掃描器,讀取條形碼的字符串並顯示在活動文本框中。 我遇到的問題是,我需要條形碼在掃描後立即使用(無用戶「確定」按鈕)。條碼掃描器讀取文本框中的值的問題
當我執行文本更改事件時,只要將條形碼的第一個字符輸入到文本框中就會觸發。 (即如果條形碼是123r54122,則在文本框中以'1'開始)。
條形碼或標準長度沒有一致的結束字符。那麼當我讀完整個字符串的時候,我會如何解決這個問題?
我有一個條形碼掃描器,讀取條形碼的字符串並顯示在活動文本框中。 我遇到的問題是,我需要條形碼在掃描後立即使用(無用戶「確定」按鈕)。條碼掃描器讀取文本框中的值的問題
當我執行文本更改事件時,只要將條形碼的第一個字符輸入到文本框中就會觸發。 (即如果條形碼是123r54122,則在文本框中以'1'開始)。
條形碼或標準長度沒有一致的結束字符。那麼當我讀完整個字符串的時候,我會如何解決這個問題?
您可以驗證文本的長度(我認爲它是恆定的條形碼)。 例如訂閱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();
}
掃描儀不發送信號表明它已完成讀取信息嗎?如果它沒有標準的結尾字符長度,那肯定會。 無論如何,您應該將值讀入內存,然後立即設置文本框文本,而不是在接收每個字符時收集它們。
編輯;如果您在收到信息時將信息寫入文本框,然後調用文本框事件..爲什麼還要將它寫入文本框?只要直接確定它是完整的條形碼即可致電
我所使用的條形碼掃描儀在條形碼字符串的末尾添加了換行符(返回/輸入)。這取決於它是如何配置的設置文本框接受退貨(AcceptReturn爲true),然後像做
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Return)
doSomething();
}
唯一的條碼掃描器我使用(從林迪一個USB模式)可以追加一回與否。通過掃描掃描儀附帶的小冊子上打印的特殊控制條碼,實現模式之間的切換。
我對C#並不熟悉,但在Java中,您可以偵聽ActionEvent而不是TextEvent,以檢測何時按下返回而不是鍵入字符。如果它在C#中可用,這將是dandan78建議的一個更簡單的替代方法。
這些都是定製的條形碼,所以沒有固定的長度 – MichaelMcCabe 2011-01-06 12:09:49
那麼你應該 1)等待來自條形碼閱讀器(例如換行) 2一些自定義字符),等待條形碼閱讀器 3的一些事件)定義了新的性格有些超時如果超時已過,但沒有添加新字符,則會出現並引發掃描事件。例如。在收到textchanged事件後啓動計時器,存儲當前的日期時間並在計時器中驗證文本是否發生了變化。 – 2011-01-06 12:14:39
完美。很棒! – MichaelMcCabe 2011-01-06 13:05:26