我试图捕捉刷卡的输入,但我被困在使用 C# Windows 窗体

Posted

技术标签:

【中文标题】我试图捕捉刷卡的输入,但我被困在使用 C# Windows 窗体【英文标题】:I'm trying to catch the input of the swiped card but I'm stuck using C# Windows Forms 【发布时间】:2012-11-25 07:52:23 【问题描述】:

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

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

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

这是我的代码:

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

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

【问题讨论】:

考虑从样本中删除所有提及信用卡的内容,并将其缩短为var keyChar='a';MessageBox.Show("foo"+keyChar);... 如果没有 e.KeyChar 中的内容和您期望的信息,就没有机会回答这个问题在那里。 当对 e.keychar 使用断点时,我注意到它循环了,所以第一个循环是 %,第二个 % 第三个 1 等等。并产生 %%1000..etc 我希望您的读卡器模拟键盘并在刷卡时发送击键,并在最后发送Enter 键,因此您可以只使用TextBox 和检测到Enter 键被按下。 @AlvinWong,但我想发生的是在刷卡后的函数中并从中获取数据并运行某个函数 有什么想法吗?我只想获取数据并运行某个功能:(请 【参考方案1】:

您需要更具体地回答您的问题。从外观上看,您的卡片扫描仪正在通过键盘缓冲区进行操作。 (许多卡片扫描仪以这种方式操作)这意味着条带的每个字符都作为一个字符接收,这就是您可以捕获此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) 您需要阅读或尝试设置它是否可以/确实发送终止字符以了解卡读取何时完成。如果您无法查看输出字符串的模式。 (即当捕获的字符串以“??”结尾时)虽然这不是最佳的。

【讨论】:

以上是关于我试图捕捉刷卡的输入,但我被困在使用 C# Windows 窗体的主要内容,如果未能解决你的问题,请参考以下文章

我被困在“输入字符串:”并且没有进行任何输入 8086 编程

C# 泛型和方法

我被困在递归地实现基数排序

我被困在运行 gradle 任务“assembledebug”

我被困在sql查询上

Imgur API GET 图像问题