0

我用的是测试卡,这是刷卡后的输出,没问题

在此处输入图像描述

但是当我试图通过提示它到消息框来获取刷卡的数据时,这将是输出

在此处输入图像描述

我怎样才能解决这个问题?我期望输出与第一张图像相同,它也将是消息框的消息

这是我的代码:

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);
        }

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

4

1 回答 1

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) 您需要阅读或尝试设置它是否可以/确实发送终止字符以了解卡读取何时完成。如果您无法查看输出字符串的模式。(即当捕获的字符串以“??”结尾时)虽然这不是最佳的。

于 2012-12-07T07:04:18.417 回答