在没有文本框的情况下捕获键盘输入

本文关键字:键盘 输入 情况下 文本 | 更新日期: 2023-09-27 17:54:06

我有一个应用程序,它从健康卡中读取数据并解析基本信息,如出生日期、健康卡号和姓名。现在,我有一个文本框,从刷卡输入,它工作得很好,但我觉得可以有一个更好的方法。

我想在应用程序的后台有一个键盘监听器,它从刷卡器捕获输入并解析数据,而不需要文本框。我想在Form1_Load中需要一个循环函数,它主动监听键盘输入,为输入准备一个缓冲区,然后当检测到回车时,继续解析缓冲的数据。解析完成后,清空缓冲区。

我的问题是我对c#比较陌生,我不知道我应该用什么来听没有文本框的键盘输入。有人能给我指个正确的方向吗?

这里是我的代码,如果有人感兴趣:http://pastebin.com/q6AkghvN

只是一个提示,我按照信用卡刷卡指南从http://www.markhagan.me/Samples/CreditCardSwipeMagneticStripProcessing并根据我的使用情况稍微修改了一下。

—edit—

感谢Paul和其他人的帮助!

下面是我的解决方案,如果有人感兴趣的话:
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;
        }
    }

在没有文本框的情况下捕获键盘输入

如果你给表单添加一个键处理程序,当焦点在控件上时,你将看不到按键,例如文本框。要使窗体即使在有焦点控件时也能看到按键,还必须启用KeyPreview属性。

您可以在表单上添加KeyDown, KeyPress和/或KeyUp的处理程序,以便接收这些事件。

正如你可以在KeyPreview的文档中读到的那样,如果你将Handled属性设置为true,你可以阻止事件随后被发送到焦点控件,即你可以隐藏某些关键事件,使其不被焦点控件看到。