2

ヘルスカードからデータを読み取り、DOB、ヘルスカード番号、名前などの基本情報を解析するアプリケーションがあります。現在、カードスワイパーからの入力を受け取るテキストボックスがあり、それはうまく機能しますが、これにはもっと良いアプローチがあると思います。

アプリケーションのバックグラウンドで、カードスワイパーからの入力をキャプチャし、テキストボックスを必要とせずにデータを解析するキーボードリスナーが必要です。キーボード入力をアクティブにリッスンし、入力用のバッファーを準備し、キャリッジリターンが検出されたら、先に進んでバッファーされたデータを解析するループ関数がForm1_Loadに必要だと思います。解析が完了したら、バッファーをクリアします。

私の問題は、C#に比較的慣れていないため、テキストボックスなしでキーボード入力を聞くために何を使用すべきかわからないことです。誰かが私を正しい方向に向けることができますか?

誰かが興味を持っている場合に備えて、私のコードは次のとおりです:http: //pastebin.com/q6AkghvN

注意点として、 http://www.markhagan.me/Samples/CreditCardSwipeMagneticStripProcessingのクレジットカードスワイプガイドに従い 、ユースケースに合わせて少し変更しました。

---編集済み---

ポールと他のみんなの助けに感謝します!

誰かが興味を持っているなら、これが私の解決策です:

private void frmMain_KeyPress(object sender, KeyPressEventArgs e)
    {
        lblStatus.Text = "Reading Card...";
        lblStatus.ForeColor = Color.Blue;
        if (e.KeyChar != (char)Keys.Enter)
        {
            buffer += e.KeyChar;
        }
        else
        {
            lblStatus.Text = "Parsing Card...";
            if (buffer.Contains('^') && buffer.Contains(';') && buffer.Contains('='))
            {
                try
                {
                    string[] cardData = buffer.Split(';');
                    string[] caretData = cardData[0].Split('^');
                    string[] nameData = caretData[1].Split('/');
                    string[] equalData = cardData[1].Split('=');
                    tBoxHealthCardNumber.Text = equalData[0];
                    tBoxDateOfBirth.Text = FormatBirthday(equalData[1]);
                    tBoxFirstName.Text = TrimName(nameData[1]);
                    tBoxLastName.Text = TrimName(nameData[0]);
                    tBoxDateTimeScanned.Text = DateTime.UtcNow.ToString("yyyy/MM/dd HH:mm");
                    e.Handled = true;
                }
                catch (Exception)
                {
                    throw;
                }
            }
            else
            {
                lblStatus.Text = "Error Reading Card";
            }

            buffer = "";
            lblStatus.Text = "Ready";
            lblStatus.ForeColor = Color.Green;
        }
    }
4

1 に答える 1

3

フォームにキーハンドラーを追加すると、テキストボックスなどのコントロールにフォーカスがあるときにキーが押されたことがわかりません。フォーカスされたコントロールがある場合でもフォームでキーの押下を確認するには、 KeyPreviewプロパティも有効にする必要があります。

次に、これらのイベントを受け取りたいときに、フォームにKeyDownKeyPressおよび/またはフォームにハンドラーを追加できます。KeyUp

ドキュメントを読むことができるように、プロパティをtrueにKeyPreview設定するとHandled、イベントが後でフォーカスされたコントロールに送信されないようにすることができます。つまり、特定のキーイベントがフォーカスされたコントロールに表示されないようにすることができます。

于 2013-01-17T14:16:00.400 に答える