我正试图抓住刷卡的输入,但我坚持使用C#Windows Forms

时间:2012-12-07 06:18:06

标签: c# winforms events credit-card

我正在使用测试卡,这是我刷卡后输出的确定

enter image description here

但是,当我试图获取刷过的数据提示它到messagebox时,这将是输出

enter image description here

我该如何解决这个问题?我希望输出与第一张图像相同,它也将是消息框的消息

这是我的代码:

private void CreditCardProcessor_Load(object sender, EventArgs e)
        {
            KeyPreview = true;
            KeyPress += CreditCardProcessor_KeyPress;
        }
    private bool inputToLabel = true;
        private void CreditCardProcessor_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (inputToLabel)
            {
                label13.Text = label13.Text + e.KeyChar;
                e.Handled = true;

            }
            else
            {
                e.Handled = false;
            }

            MessageBox.Show(label13.Text);
        }

简而言之,我想在刷卡后运行一个功能,并使用其数据在我的功能中使用。 :)

1 个答案:

答案 0 :(得分:5)

您需要更具体地回答您的问题。从卡片扫描仪通过键盘缓冲区操作的外观。 (许多卡片扫描仪以这种方式操作)这意味着条带的每个字符都作为一个字符被接收,这就是为什么你可以捕获这个OnKeyPress

如果你想知道为什么你一次只看到一个角色,那正是因为你正在提出一个收到每个角色的消息框。如果您想知道何时可以使用该代码调用具有整个卡片信息的功能,您需要的是:

private bool inputToLabel = true;
private StringBuilder cardData = new StringBuilder();
private void CreditCardProcessor_KeyPress(object sender, KeyPressEventArgs e)
    {
        if (!inputToLabel)
            return;

        if (e.KeyChar == '\r')
        {
            MessageBox.Show(cardData.ToString()); // Call your method here.
        }
        else
        {
            cardData.Append(e.KeyChar);
            //label13.Text = label13.Text + e.KeyChar;
        }
        e.Handled = true;
    }

警告:这是假设读卡器库配置为使用回车来终止读卡。 (\ r \ n)您需要阅读或试验它,以确定它是否能够/确实发送终止字符以了解读卡完成的时间。如果失败,您可以观看模式的输出字符串。 (即当捕获的字符串以“??”结尾时)虽然这不太理想。