读取 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;
}