2010-05-24 17 views
11

Barkodu taramak için Tarayıcı (temel model) kullanıyorum. Taranan barkod bir metin kutusunda yakalanacaktır. TxtBarcode_TextChanged olayında barkodun erişmesini sağlıyorum.Taranan değer (tarayıcıyı kullanarak) metin kutusuna

Sorun:

i kereden fazla tarayıcıyı tıkladıysanız, barkod önceki değer ekleme alır.

Kodu:

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


It:

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

Bu tam olarak geçerli bir sorudur, belki de ingilizce mükemmel değildir, ancak istediği açıktır. – Kazar

cevap

8

Barkod tarayıcıları ile ilgili olan şey genellikle standart bir HID klavye gibi görünmeleridir. Bu nedenle, taranan her yeni kod bir öncekinden sonra 'yazılmıştır'. Geçmişte kullandığım bir çözüm, o metin kutusundaki tuş basışları arasında ne kadar zaman geçtiğini görmektir. Eğer 10 milisaniyeden fazlasa (veya bu değerin etrafındaysa, bunun, kullandığım tarayıcı için 'kod' yazmak için kullandığım en büyük zaman olduğuna inanıyorum), o zaman bu yeni bir barkoddur ve ondan önce her şeyi silmeniz gerekir. .

sınıf/yöntem adları en kapalı yol muhtemelen bu yüzden, ele bir IDE yok, ama bir örnek gibi bir şey:

DateTime lastKeyPress = DateTime.Now; 

void txtBarcode_KeyPress(object sender, KeyPressEventArgs args) 
{ 

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

Bunu yapmak gerektiğini düşünüyorum. KeyPress olayı karakter eklenmeden önce çalışır, bu nedenle ilk önce metin kutusunu temizleyebilirsiniz.

Düzenleme: kurmak için, sana txtBarcode.TextChanged += txtBarcode_TextChanged bulunan her yerden, bunun yerine bir txtBarcode.KeyPress += txtBarcode_KeyPress sahip olduğunu tahmin ediyorum. Etkinlik adını doğru olsa kontrol edin.

Düzenleme 2:


jQuery Versiyon:

ASP kullanıyorken bu HTML (varsayarsak, giriş etiketi için kaynak farklı görünecektir, ancak çıkış hala sahip olacaktır O zaman bu

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

çalışır javascript: gerçekten önemli olan tek) 'dir id niteliği,

$(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 milisaniye (en azından bir web tarayıcısında) karakterler arasında izin vermek gerekli zaman gibi görünüyor. Bunu Firefox, Chrome ve IE7'de test ettim.

+0

cevabı ekledim, bkz. Düzenle. – Kazar

+0

Aslında, bu bir web sayfasındaki bir metin girişindeki bir olayı elleçlemek için gerekli midir? Tamamen farklı bir kod. – Kazar

+0

javascript/jquery için kodunuz var mı? – Geeth

-1

Eğer txtBarcode.value += barcode atıyorsanız, bu tür için TextChanged olay işleyicisi değiştirmek için txtBarcode.value = barcode

+0

-1: Bir barkod tarayıcı kullanıyor. Metindeki kodunu eklemiyor. – Mahmoodvcs

2

denemede olarak değiştirin kodu okuduktan sonra metin kutusunda metin seçecek ve diğer okunan üzerine yeniden yazacaktır. + kopyalamak veya değiştirmek için kullanıcılar için daha uygun olacaktır.

+0

.NET TextBox sınıfını kullanıyor musunuz? Eğer öyleyse, SelectionStart, SelectionLength olmalıdır. Barkoddereader ile çalışırken bu kodu kendim kullandım ve daha önce okunan barkodu yeniden yazmak istedim. – 0x49D1

+0

Geeth

+0

oops..i winforms olduğunu düşündüm (javascript hakkındaki etiketleri kaçırdı). Sonra belki bu yardımcı olur ve aynı ben winforms yaptım: http://bytes.com/topic/asp-net/answers/288734-selecting-all-text-textbox – 0x49D1

2

Çoğu tarayıcı taramadan sonra "enter tuşuna" basmak için programlanabilir, kullanım kılavuzunuzu kontrol edin. "Enter" anahtarını kontrol etmek ve barkodunuz için sınırlayıcı olarak kullanmak için bir Keypress veya Keydown olay işleyicisini kullanabilirsiniz.İsterseniz özel bir sınırlama karakteri de kullanabilirsiniz.

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 
      } 
     } 
İlgili konular