using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public delegate void BarcodeReceivedEventHandler(object sender, BarcodeReceivedEventArgs e);
public class BarcodeReceivedEventArgs : EventArgs
{
private string _barcode;
public BarcodeReceivedEventArgs(string Barcode)
{
_barcode = Barcode;
}
public string Barcode { get { return _barcode; } }
}
public partial class Form1 : Form
{
public event BarcodeReceivedEventHandler BarcodeReceived;
const char ScannerStartCharacter = '~';
const char ScannerEndCharacter = '\r';
private StringBuilder scannedCharacters;
private bool currentlyReadingScanner;
public Form1()
{
InitializeComponent();
currentlyReadingScanner = false;
scannedCharacters = new StringBuilder();
this.KeyPreview = true;
this.KeyPress += new KeyPressEventHandler(Form1_KeyPress);
this.BarcodeReceived += new BarcodeReceivedEventHandler(Form1_BarcodeReceived);
}
void Form1_BarcodeReceived(object sender, BarcodeReceivedEventArgs e)
{
MessageBox.Show("Barcode scanned: " + e.Barcode);
}
void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
if (currentlyReadingScanner)
{
if (e.KeyChar == ScannerEndCharacter)
{
currentlyReadingScanner = false;
e.Handled = true;
OnBarcodeRecieved(new BarcodeReceivedEventArgs(scannedCharacters.ToString()));
}
else
{
scannedCharacters.Append(e.KeyChar);
e.Handled = true;
}
}
else
{
if (e.KeyChar == ScannerStartCharacter)
{
scannedCharacters.Remove(0, scannedCharacters.Length);
currentlyReadingScanner = true;
e.Handled = true;
}
}
}
protected virtual void OnBarcodeRecieved(BarcodeReceivedEventArgs e)
{
if (BarcodeReceived != null)
BarcodeReceived(this, e);
}
}
}
void Form1_KeyPress(object sender, KeyPressEventArgs e)and I used:
protected override void OnKeyPress(KeyPressEventArboth seem to work, but what the difference here, which is best?gs e)