【问题标题】:Visual C# key detecting anomaly (D character added) while reading RFID card读取 RFID 卡时 Visual C# 键检测异常(添加 D 字符)
【发布时间】: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


【解决方案1】:

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

【讨论】:

  • 谢谢,它有效,但我仍然想念(从技术上讲)在键盘上按下的实际键和 rfid 阅读器按下的“键”之间有什么区别,这会导致按下“D1”键。仍然是一个常规字符作为文本输入
  • @didrocks66 如果您按数字键盘上的数字键(假设您的键盘有数字键),您会得到“NumPad1NumPad2NumPad3...”或按 Shift-X,您将看到“LeftShiftX”。该事件告诉您正在按下的键,而不是正在传输到 TextBox 等的“值”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 2021-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多