2012-06-01 23 views
8

C# dili ile bir muhasebe programı oluşturmak istiyorum. Mağazadaki ürünleri aramak için bir barkod okuyucu kullanmak istiyorum (bu benim programım için isteğe bağlıdır) Şimdi, satıcı ana barkod okuyucusu kullandığında, yöntem veya olay için barkod değerini al; Kalıcı yöntem veya olay için formun arka planında (metin kutusu olmadan) barkod değeri nasıl edinilir?barkod okuyucu değeri formunu al arkaplan izleme

Not: My barkod okuyucu HID (USB arayüzü)

cevap

14

barkod cihazı bir klavye gibi davranır. Bir metin kutusuna odaklandığınızda, metin kutusuna klavyeden yazdığınız gibi karakterler gönderir.

Metin kutusunu kullanmak istemiyorsanız, barkod akışını yakalamak için bir klavye olay işleyicisine abone olmanız gerekir.

Form1.InitializeComponent():

this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Form1_KeyPress); 

Handler & destekleyen öğeler:

DateTime _lastKeystroke = new DateTime(0); 
List<char> _barcode = new List<char>(10); 

private void Form1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    // check timing (keystrokes within 100 ms) 
    TimeSpan elapsed = (DateTime.Now - _lastKeystroke); 
    if (elapsed.TotalMilliseconds > 100) 
     _barcode.Clear(); 

    // record keystroke & timestamp 
    _barcode.Add(e.KeyChar); 
    _lastKeystroke = DateTime.Now; 

    // process barcode 
    if (e.KeyChar == 13 && _barcode.Count > 0) { 
     string msg = new String(_barcode.ToArray()); 
     MessageBox.Show(msg); 
     _barcode.Clear(); 
    } 
} 

Sen "tuş" takip yapmak ve "satırbaşı için dışarı bakmak gerekecek "Bu barkod akışı ile gönderilir. Bu bir dizide kolayca yapılabilir. Kullanıcı tuş vuruşlarını ve barkod tuş vuruşlarını birbirinden ayırmak için yapabileceğiniz tek bir numara, tuş vuruşlarının zamanlamasını takip etmektir. Örneğin, 100 ms'den daha az bir tuş vuruşu akışıyla, w/a satırına dönüşü sona erdirme dışında, bir barkod olduğunu varsayabilir ve buna göre işlem yapabilirsiniz.

Alternatif olarak, barkod tarayıcınız programlanabilirse, özel karakterler veya sıralamalar da gönderebilirsiniz.

+1

Yanıt için tnx, main Kimden metin kutusu değil.Kodu akışı yakalamak için klavye olay işleyicisine mesaj gönderebilirsiniz? –

+0

, KeyPress olayını doğrudan bir Form'a –

+0

ekleyebilir, ancak KeyPress olayı yalnızca char alır ve app için barkodun gönderdiği tüm char için tekrarlayın. –