10

C#言語で会計プログラムを作りたいです。ショップで商品を検索するためにバーコード リーダーを使用したい (これは私のプログラムではオプションです) ここで、売り手がバーコード リーダーを使用する場合、メイン フォームでハンドル メソッドまたはイベントのバーコード値を取得します。handle メソッドまたはイベントのフォームのバックグラウンド (テキスト ボックスなし) でバーコード値を取得するにはどうすればよいですか?

注: 私のバーコード リーダーは HID (USB インターフェイス) です。

4

1 に答える 1

19

バーコード デバイスは、キーボードのように動作します。テキストボックスにフォーカスがあると、キーボードから入力したかのように文字がテキストボックスに送信されます。

テキスト ボックスを使用したくない場合は、バーコード ストリームをキャプチャするために、キーボード イベント ハンドラーをサブスクライブする必要があります。

Form1.InitializeComponent():

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

ハンドラー & サポート アイテム:

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();
    }
}

「キーストローク」を追跡し、バーコード ストリームと共に送信される「キャリッジ リターン」に注意する必要があります。これは、配列で簡単に実行できます。ユーザーのキーストロークとバーコードのキーストロークを区別するために、キーストロークのタイミングを追跡することができます。

たとえば、キーストロークの間隔が 100 ミリ秒未満で、キャリッジ リターンで終了する一連のキーストロークを取得した場合、それはバーコードであると想定して、それに応じて処理できます。

または、バーコード スキャナーがプログラム可能な場合は、特殊文字またはシーケンスを送信することもできます。

于 2012-06-01T12:18:09.830 に答える