我有一个小型事件处理程序来处理用户按下的或条形码扫描器传送的所有键:
public void KeyDownSink(object sender, System.Windows.Input.KeyEventArgs e)
{
_textRead.Append(e.Key);
}
private StringBuilder _textRead = new StringBuilder();
变量 _textRead
应该收集所有按下的字符。我只对产生可打印输出的键感兴趣(a-z、0-9、!"§$%& 等等)。如果用户按下例如 Ctrl 这将添加字符串 LeftCtrl 到 _textRead
,所以我想跳过这个键。
如何优雅地过滤掉 Ctrl、Shift、Alt...等控制键?强>
我知道我可以通过很多条件语句 ( if e.Key == Key.Ctrl
) 来实现这一点,但我希望找到更好的方法。
最佳答案
试试这个:
using System;
using System.Text;
using System.Windows.Input;
public void KeyDownSink(object sender, System.Windows.Input.KeyEventArgs e)
{
string keyPressed = _keyConv.ConvertToString(e.Key);
if (keyPressed != null && keyPressed.Length == 1)
{
if (char.IsLetterOrDigit(keyPressed[0]))
{
_textRead.Append(keyPressed[0]);
}
}
}
private StringBuilder _textRead = new StringBuilder();
private KeyConverter _keyConv = new KeyConverter();
关于c# - 从 KeyEventArgs 过滤控制键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8415149/