Разрешить только "Shift + _" из игнорируемых символов - PullRequest
1 голос
/ 20 декабря 2011

Я использую этот код для блокировки некоторых клавиш в текстовом поле.

private void tb_MyTextBox_KeyDown(object sender, KeyEventArgs e)
{
    // Handle Shift case
    if (Keyboard.Modifiers == ModifierKeys.Shift)
        e.Handled = true;

    // Handle all other cases
    if (!e.Handled && (e.Key < Key.D0 || e.Key > Key.Z))
    {
        if (e.Key < Key.NumPad0 || e.Key > Key.NumPad9)
        {
            if (e.Key != Key.Back)
                e.Handled = true;
        }
    }
}

Этот код блокирует все клавиши, кроме от A до Z и от 0 до 9. Но я также хочу разрешить _, которое вы получите по Shift + _.

Как это сделать длятолько Shift + _ ?????(Весь код находится на событии KeyDown Siverlight)

Ответы [ 2 ]

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

Мне не нравится идея проверки аргументов KeyPress, поскольку существует множество случаев, которые не учитываются (например, альтернативные раскладки клавиатуры, включение CAPS LOCK или вставка текста из буфера обмена).

Я вижу два способа сделать это правильно:

  1. Создайте поведение, которое вы прикрепляете к TextBox. Поведение будет отслеживать текущий текст и подписываться на событие TextChanged. Всякий раз, когда происходит событие, поведение будет гарантировать, что текст является действительным, а если нет, просто установите текст обратно к последнему действительному значению, которое он видел.

  2. Создайте подкласс TextBox, в котором вы переопределите метод OnTextInput(). Здесь вы можете делать любые проверки, которые хотите, и если вам не нравится введенный текст (e.Text), просто установите e.Handled = true, и ввод будет проигнорирован.

0 голосов
/ 20 декабря 2011

Вы можете сделать это так:

if ((e.Modifiers == Keys.Shift) && (e.KeyCode == Keys.OemMinus))
{
    // Do Something
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...