2010-05-24 83 views
11

我正在使用掃描儀(基本型號)掃描條形碼。掃描的條形碼將被捕獲在文本框中。在txtBarcode_TextChanged事件中,我正在獲取條形碼。文本框中的掃描值(使用掃描儀)

問題:

如果我點擊掃描儀不止一次,條形碼獲取與前值追加。

代碼:

protected void txtBarcode_TextChanged(object sender, EventArgs e) 
    { 
     string txt = this.txtBarcode.Text; 
     this.txtBarcode.Text = string.Empty; 
    } 
+2

這是一個完全有效的問題,也許英文不完美,但他想要的是明確的。 – Kazar 2010-05-24 07:04:04

回答

8

條形碼掃描儀的事情是,他們通常呈現自己看起來像一個標準的HID鍵盤。因此,掃描的每個新代碼在上一個代碼之後被有效'鍵入'。我過去使用的解決方案是查看該文本框中按鍵之間需要多少時間。如果它超過10毫秒(或大約那個值,我相信這是用於'輸入'整個代碼的掃描器所花費的最多時間),那麼這是一個新的條形碼,並且您應該刪除它之前的所有內容。

我沒有得到一個IDE手,所以大多數的類/方法的名稱可能是路要走,但類似的例子:

DateTime lastKeyPress = DateTime.Now; 

void txtBarcode_KeyPress(object sender, KeyPressEventArgs args) 
{ 

    if(((TimeSpan) (DateTime.Now - lastKeyPress)).TotalMilliseconds > 10) 
    { 
    txtBarcode.Text = "";  
    } 
    lastKeyPress = DateTime.Now; 
} 

我認爲應該這樣做。它的作用是因爲KeyPress事件發生在追加字符之前,因此您可以先清除文本框。

編輯:建立,我想,只要您有txtBarcode.TextChanged += txtBarcode_TextChanged,你不是有一個txtBarcode.KeyPress += txtBarcode_KeyPress。檢查事件名稱是正確的。

編輯2


jQuery的版本:

,因爲你正在使用ASP假設這HTML(,您的輸入標籤源將有所不同,但輸出仍然有id屬性,這實在是唯一重要的一個):

<form action="" method="post"> 
     <input type="text" name="txtBarcode" id="txtBarcode" /> 
    </form> 

然後此javascript工程:

$(document).ready(function() { 

    var timestamp = new Date().getTime(); 

    $("#txtBarcode").keypress(function(event) 
    { 
     var currentTimestamp = new Date().getTime(); 

     if(currentTimestamp - timestamp > 50) 
     { 
      $(this).val(""); 
     } 
     timestamp = currentTimestamp; 
    });         

}); 

似乎(至少在網絡瀏覽器中)50毫秒是字符間允許的所需時間。我已經在Firefox,Chrome和IE7中測試過了。

+0

我已經將它添加到答案,請參閱編輯。 – Kazar 2010-05-24 12:29:33

+0

其實,這是否需要jQuery處理網頁上的文字輸入事件?不同的代碼如果是這樣。 – Kazar 2010-05-24 12:30:38

+0

你有javascript/jquery的代碼嗎? – Geeth 2010-05-25 04:20:02

-1

如果你要指定txtBarcode.value += barcode,將其更改爲txtBarcode.value = barcode

+0

-1:他使用條形碼掃描儀。他沒有在他的代碼中追加文本。 – Mahmoodvcs 2014-01-07 09:34:16

2

嘗試改變TextChanged事件處理程序,以一種這樣的:

txtBarcode.SelectionStart = 0; 
txtBarcode.SelectionLength = txtBarcode.Text.Length; 


它將在閱讀代碼後在文本框中選擇文本,並在其他閱讀中重寫它。 +它會更適合用戶複製或手工更改

+0

你使用.NET TextBox類嗎?如果是,則必須有SelectionStart,SelectionLength。我在使用barcodereader時自己使用了這個代碼,並且想要重寫以前讀取的條形碼。 – 0x49D1 2010-05-25 05:07:36

+0

Geeth 2010-05-25 05:33:52

+0

oops ..i認爲你有winforms(錯過關於javascript的標籤)。然後,也許這將有助於做同樣的事情,我做了winforms:http://bytes.com/topic/asp-net/answers/288734-selecting-all-text-textbox – 0x49D1 2010-05-25 05:39:43

2

大多數掃描儀可以編程爲在掃描後按「輸入」,檢查您的用戶手冊。您可以使用Keypress或Keydown事件處理程序來檢查「輸入」鍵並將其用作條形碼的分隔符。如果您願意,也可以使用特殊的分隔字符。

private void txtScan_KeyDown(object sender, KeyRoutedEventArgs e) 
     { 
      if (e.Key == Windows.System.VirtualKey.Enter) 
      { 
       //Do something here... 

       txtScan.Text = ""; 
       txtScan.Focus(FocusState.Programmatic); 
       e.Handled = true; //keeps event from bubbling to next handler 
      } 
     }