c# - 从 KeyEventArgs 过滤控制键

标签 c# wpf

我有一个小型事件处理程序来处理用户按下的或条形码扫描器传送的所有键:

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 ,所以我想跳过这个键。

如何优雅地过滤掉 CtrlShiftAlt...等控制键?

我知道我可以通过很多条件语句 ( 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/

相关文章:

c# - .Net 紧凑型框架 SqlClient 异常

c# - 为什么我的面板不显示我的 C# 应用程序中的所有按钮?

c# - 在每个函数中使用 DataContext

.net - WPF 数据网格行删除线

c# - 如何将 JSON 字符串化模型序列化为 ASP.NET MVC3 模型

c# - 需要有关 C# LINQ 列表聚合表达式的建议

c# - 在 WPF C# 项目中使用另一个类

c# - 使用 TextBox 在 WPF slider 上呈现刻度数

.net - Awesomium WebControl 挂起

c# - 向 WPF 中的 Button_Click 事件添加参数