ヘルスカードからデータを読み取り、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;
}
}