我有一個應用程序,從健康卡讀取數據並解析他們的基本信息,如D.O.B.,Health Card#和名稱。現在,我有一個文本框,可以從刷卡器中獲取輸入信息,並且效果很好,但是我覺得可能有更好的方法。捕獲沒有文本框的鍵盤輸入
我想在應用程序的背景中有一個鍵盤監聽器,它捕獲卡片掃描器的輸入並解析數據而不需要文本框。我想我需要在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;
}
}
我不確定表單上的按鍵事件是否會檢測到滑動,但您可以試試 – AbZy
我只是在查看您的代碼,卡讀取器實際發送數據的位置? –
@ Shane.C從我的理解中,許多讀卡器充當鍵盤:它們將數據發送到鍵盤上,就好像它已經鍵入了鍵盤一樣。我相信條形碼掃描儀也傾向於以這種方式工作。 –