【问题标题】:a way to compare special characters一种比较特殊字符的方法
【发布时间】:2016-06-21 09:36:36
【问题描述】:

我正在使用扫描仪向我发送这样的条形码:“¬00111111111112222222”作为按下的键,如 USB 键盘。我所要做的就是在获得前缀“¬”时将焦点设置在 TextBox 上。

现在的问题是,在我的 KeyDown 事件中,KeyEventArgs 是“系统”,而不是我前缀中的字符。有没有办法比较这个标志来设置焦点?

我试过的代码是:

private void KeyDownEvent(object sender, KeyEventArgs e)
{
    if (Convert.ToString(e.Key) == "¬")
    {
        myTextBox.Focus();
    }
}

更新: 我现在尝试了 e.SystemKey,此时,我将 LeftAlt 作为 Event 参数。那么也许 AISCII 代码被转换为这个 SystemKey LeftAlt?

更新: 我记录了扫描条形码时得到的所有密钥,我注意到我没有像我想的那样得到 ASCII 码本身。我得到的是使这个符号像“Alt+NumPad0+NumPad7+NumPad2”这样的组合键,所以现在我只需要将它们与“¬”符号中的 ASCII 码匹配,然后它就可以工作了。谢谢大家的帮助..

【问题讨论】:

  • KeyInterop.VirtualKeyFromKey(e.Key); 呢?
  • 您确定您的扫描仪返回的正是 KeyDown 事件吗?通常 KeyEventArgs e 应该包含按下的键的详细信息。 KeyDown 事件如何在没有任何触发器的情况下触发?有什么办法可以得到整个字符串之类的吗?
  • This 可能会帮助你。但你可能会做一些调整
  • 我试过你的答案,但我得到的虚拟键是 144,代表 NumLock,此时与键盘上的真正 NumLock 按钮没有区别。所以这很有效。

标签: c# wpf


【解决方案1】:

尝试读取串行输入缓冲区(串行通信示例)并解析字符串以检查特殊字符。 在这里检查: http://www.codeproject.com/Articles/678025/Serial-Comms-in-Csharp-for-Beginners

或 您可以只获取 ascii 值并与特定值或范围进行比较。 例如, 小于 65 或大于 126。

【讨论】:

  • 我不确定,但我认为您的第一个建议仅适用于 Comport,对吗?但是,我只有USB。我尝试了第二个,但问题似乎是 KeyEventArgs 正在将整个字符更改为 LeftAlt。我意识到的另一件事是,如果我将文本写入文本框,我可以从 TextBox.Text 中获取正确的字符,因此它必须临时保存实际按下的键。也许我能读懂这个 Cach 里面的内容。
  • 我已经尝试使用 rs232 rs422 和 usb 的第一个选项。在任何地方都能出色地工作。但是,您可以尝试任何您认为有希望的方法。
  • 这个解决方案的最大问题是我使用的是 WPF 而不是 Windows 窗体。遗憾的是,我的 KeyEventArgs 上没有 KeyChar 属性。我也没有其他属性可以显示 KeyEventArgs 的 ASCII 代码。
猜你喜欢
  • 2017-05-02
  • 1970-01-01
  • 2015-11-06
  • 2016-10-29
  • 1970-01-01
  • 1970-01-01
  • 2015-07-15
  • 2019-08-03
  • 1970-01-01
相关资源
最近更新 更多