obține valoarea de citire a codului de bare de monitorizare a fundalului

Vreau să creez un program de contabilitate cu limba c #. Vreau să folosesc un cititor de coduri de bare pentru căutarea produselor în magazin (acest lucru este opțional pentru programul meu) Acum, în forma principală, dacă vânzătorul folosește un cititor de coduri de bare, obțineți valoarea codului de bare pentru metoda sau evenimentul cu mâner; Cum pot obține valoarea codului de bare în fundalul formularului (fără casetă text) pentru metoda sau evenimentul mâner?

Notă: cititorul de coduri de bare este HID (interfață USB)

8

1 răspunsuri

Dispozitivul de cod de bare se comportă ca o tastatură. Când vă concentrați într-o casetă de text, acesta trimite caractere în caseta de text ca și cum le-ați tastat de la tastatură.

Dacă nu doriți să utilizați o casetă de text, va trebui să vă abonați la un handler de evenimente pentru tastatură pentru a captura fluxul de cod de bare.

Form1.InitializeComponent ():

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

Handler & supporting items:

DateTime _lastKeystroke = new DateTime(0);
List _barcode = new List(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();
    }
}

Va trebui să țineți evidența "apăsărilor de taste" și să aveți grijă de "întoarcerea transportului" care este trimis cu fluxul de coduri de bare. Acest lucru se poate face cu ușurință într-o matrice. Pentru a diferenția între apăsările tastelor de la utilizatori și apăsările de taste ale codurilor de bare, un truc murdar pe care îl puteți face este să urmăriți calendarul apăsărilor de la tastatură.

De exemplu, dacă obțineți un flux de apăsări de taste mai mici de 100 ms în afară, terminând cu o retur de carucior, puteți presupune că este un cod de bare și un proces în consecință.

Alternativ, dacă scanerul dvs. de coduri de bare este programabil, puteți trimite și caractere sau secvențe speciale.

15
adăugat
de ce definiți _barcode ca List (10); nu doar lista ()?
adăugat autor Willy, sursa
tnx pentru răspuns, În principal De la nu este textbox.how poate ubscribe la un handler de evenimente tastatură pentru a capta fluxul de cod de bare?
adăugat autor hamid reza mansouri, sursa
dar evenimentul KeyPress se obține numai pe caractere și se repetă pentru toate caracterele pe care codul de bare le trimite pentru aplicație.
adăugat autor hamid reza mansouri, sursa
puteți adăuga evenimentul KeyPress direct la un formular
adăugat autor ltiong_sh, sursa
* am făcut acest lucru pentru a "lega" un cod de bare pe o pagină html (non input/textfield) ... și funcționează ca un campion.
adăugat autor ltiong_sh, sursa
nici un motiv special de dragul exemplului într-adevăr ... dacă nimic altceva nu sunteți mai bine setarea dimensiunea inițială dacă știți dimensiunea aproximativă a datelor așteptate. În caz contrar, puteți rula probleme în care CLR trebuie să reinițializeze lista <> de fiecare dată când acesta atinge capacitatea.
adăugat autor ltiong_sh, sursa