读取 RFID 卡时 Visual C# 键检测异常(添加 D 字符)
Visual C# key detecting anomaly (D character added) while reading RFID card
我正在使用 Visual C# 2015 开发一个程序,它应该通过 rfid 卡对用户进行身份验证。我使用的设备只是模拟键盘:假设我打开记事本,然后在 reader 附近滑动标签或卡,然后我得到序列号 + 输入,就像大多数条形码 readers工作。
显然,我不希望用户看到代码,也不希望 him/her 能够在文本框中键入它,所以我的想法是在身份验证时捕获来自 "that keyboard" 的输入,使用 KeyDown 事件,将缓冲区变量中的所有字符,然后在按下回车键时(即代码末尾)将其与数据库进行检查。
问题是,假设卡片被标记为 12345678,这是我在记事本或文本框中得到的。但是当我显示缓冲区时,我得到 "D1D2D3D4D5D6D7D8";我可以通过在数据库的每个字符之前添加一个 D 来简单地避免这个问题,但我真的很想了解为什么会这样。是编码问题,还是按键事件彼此太接近?有人知道吗?谢谢
编辑:
代码如下:
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 = "";
}
}
}
KeyDown 事件只是为您提供实际按下的键,因此请尝试使用 TextInput 事件来处理字符串部分:
private void OnKeyDownHandler(object sender, KeyEventArgs e) {
if (e.Key == Key.Enter) {
MessageBox.Show(cardReadBuffer);
cardReadBuffer = "";
e.Handled = true;
}
}
private void OnTextInput(object sender, TextCompositionEventArgs e) {
cardReadBuffer += e.Text;
}
我正在使用 Visual C# 2015 开发一个程序,它应该通过 rfid 卡对用户进行身份验证。我使用的设备只是模拟键盘:假设我打开记事本,然后在 reader 附近滑动标签或卡,然后我得到序列号 + 输入,就像大多数条形码 readers工作。 显然,我不希望用户看到代码,也不希望 him/her 能够在文本框中键入它,所以我的想法是在身份验证时捕获来自 "that keyboard" 的输入,使用 KeyDown 事件,将缓冲区变量中的所有字符,然后在按下回车键时(即代码末尾)将其与数据库进行检查。
问题是,假设卡片被标记为 12345678,这是我在记事本或文本框中得到的。但是当我显示缓冲区时,我得到 "D1D2D3D4D5D6D7D8";我可以通过在数据库的每个字符之前添加一个 D 来简单地避免这个问题,但我真的很想了解为什么会这样。是编码问题,还是按键事件彼此太接近?有人知道吗?谢谢
编辑:
代码如下:
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 = "";
}
}
}
KeyDown 事件只是为您提供实际按下的键,因此请尝试使用 TextInput 事件来处理字符串部分:
private void OnKeyDownHandler(object sender, KeyEventArgs e) {
if (e.Key == Key.Enter) {
MessageBox.Show(cardReadBuffer);
cardReadBuffer = "";
e.Handled = true;
}
}
private void OnTextInput(object sender, TextCompositionEventArgs e) {
cardReadBuffer += e.Text;
}