我有一个小事件处理程序来处理用户按下或条形码扫描器传送的所有按键:
public void KeyDownSink(object sender, System.Windows.Input.KeyEventArgs e)
{
_textRead.Append(e.Key);
}
private StringBuilder _textRead = new StringBuilder();
变量_textRead
应该收集所有按下的字符。我只对生成可打印输出的键感兴趣(az,0-9,!“§$%&amp;等等。)如果用户按下例如 Ctrl ,则会添加字符串< em> LeftCtrl 到_textRead
,所以我想跳过这个键。
如何以优雅的方式过滤出 Ctrl , Shift ,, Alt 等控制键?
我知道我可以通过很多条件语句(if e.Key == Key.Ctrl
)实现这一点,但我希望找到更好的方法。
答案 0 :(得分:2)
试试这个:
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();
答案 1 :(得分:0)
我偶然发现了有关KeyEventArgs过滤的问题。由于这个问题用粗体表示,因此我想为该问题添加答案
过滤掉修饰符
public void KeyDownSink(object sender, System.Windows.Input.KeyEventArgs e) {
var pressedModifiers = e.KeyboardDevice.Modifiers;
if (pressedModifiers != ModifierKeys.None) return;
//do your stuff
}
这将过滤掉Ctrl + a
之类的组合过滤掉特定的修饰符
public void KeyDownSink(object sender, System.Windows.Input.KeyEventArgs e) {
List<Key> ExitKeys = new List<Key> { Key.LeftCtrl, Key.RightCtrl, Key.LeftAlt, Key.RightAlt, Key.LeftShift, Key.RightShift };
if (ExitKeys.contains(e.Key)) return;
//do your stuff
}