Фильтр управляющих клавиш от KeyEventArgs - PullRequest
2 голосов
/ 07 декабря 2011

У меня есть небольшой обработчик событий для обработки всех клавиш, нажимаемых пользователем или доставляемых сканером штрих-кода:

public void KeyDownSink(object sender, System.Windows.Input.KeyEventArgs e)
{
    _textRead.Append(e.Key);
}

private StringBuilder _textRead = new StringBuilder();


Переменная _textRead должна собирать все нажатые символы. Меня интересуют только ключи, которые выводят на печать (az, 0-9,! "§ $% и т. Д.). Если пользователь нажимает, например, Ctrl , это добавит строку LeftCtrl до _textRead, поэтому я хочу пропустить эту клавишу.

Как отфильтровать управляющие клавиши, такие как Ctrl , Shift ,, Alt ... элегантным способом?

Я знаю, что могу достичь этого с помощью множества условных выражений (if e.Key == Key.Ctrl), но я надеюсь найти более хороший способ.

1 Ответ

2 голосов
/ 07 декабря 2011

Попробуйте это:

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...