我试图捕捉刷卡的输入,但我被困在使用 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 编程