【发布时间】:2016-12-23 06:31:59
【问题描述】:
我正在 Visual C# 2015 中开发一个程序,它应该通过 rfid 卡对用户进行身份验证。我使用的设备只是模拟键盘:假设我打开记事本,然后在阅读器附近刷标签或卡,然后我得到序列号 + 输入,就像大多数条形码阅读器一样。 显然,我不希望用户看到代码,也不想让他/她能够在文本框中输入代码,所以这个想法是在身份验证时从“那个键盘”捕获输入,使用 KeyDown 事件,将所有字符放入一个缓冲区变量,然后在按下回车时(即代码的结尾)检查它与数据库的对比。
问题是,假设卡片被标记为 12345678,这是我在记事本或文本框中得到的。但是当我显示缓冲区时,我得到“D1D2D3D4D5D6D7D8”;我可以通过在数据库的每个字符前添加一个 D 来简单地避免这个问题,但我真的很想了解为什么会发生这种情况。是编码问题,还是 keydown 事件彼此太接近?有人有线索吗?谢谢
编辑:
代码如下:
XAML
<Window x:Class="myApp.MainWindow"
(...)
KeyDown="OnKeyDownHandler">
C#
private void OnKeyDownHandler(object sender, KeyEventArgs e)
{
if (!authenticated) {
if (e.Key != Key.Enter)
{
cardReadBuffer += e.Key;
}
else
{
//this returns every character preceded by a D; doesn't happen
//if I type some characters on my keyboard and then press enter
MessageBox.Show(cardReadBuffer);
cardReadBuffer = "";
}
}
}
【问题讨论】:
-
But when I display the buffer...这就是您需要向我们展示的代码。
标签: c# .net barcode keydown rfid