Разрешить только определенные ключи в TextBox - PullRequest
0 голосов
/ 19 мая 2018

У меня есть вопрос.Примеры, которые я нахожу на "KeyPress", и они больше не работают на WPF

Можете ли вы сказать мне, как разрешить запись только указанных ключей от клавиатуры в текстовое поле WPF?Я знаю о функциях keyUp и Down, но как определить буквы, которые я хочу ввести по типу?

Думаю, будет проще, если я опубликую свой код и скажу вам, что я хочу сделать,Что здесь изменить?

private void textBox_KeyDown(object sender, KeyEventArgs e)
    {
        //something here to only allow "A" key to be pressed and displeyed into textbox
        if (e.Key == Key.A)
        {                
            stoper.Start();
        }
    }

private void textBox_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.A)
        {
            //here i stop the stopwatch to count time of pressing the key
            stoper.Stop();
            string aS = stoper.ElapsedMilliseconds.ToString();
            int aI = Convert.ToInt32(aS);
            stoper.Reset();
        }
    }

Ответы [ 2 ]

0 голосов
/ 20 мая 2018

Эта штука прекрасно работает для меня (спасибо за @JohnyL):

private void textBox_KeyDown(object sender, KeyEventArgs e)
{
    //something here to only allow "A" key to be pressed and displeyed into textbox
    if (e.Key == Key.A)
    {                
        stoper.Start();
    }
    else
        e.Handled = true;
}

private void textBox_KeyUp(object sender, KeyEventArgs e)
{
    if (e.Key == Key.A)
    {
        //here i stop the stopwatch to count time of pressing the key
        stoper.Stop();
        string aS = stoper.ElapsedMilliseconds.ToString();
        int aI = Convert.ToInt32(aS);
        stoper.Reset();
    }
}
0 голосов
/ 19 мая 2018

Вы можете использовать PreviewKeyDown и использовать e.Key, чтобы отфильтровать то, что вам нужно.

Или, в любом месте вашего кода, которое вы можете использовать Клавиатура класс:

if (Keyboard.IsKeyDown(Key.E)) { /* your code */ }

ОБНОВЛЕНИЕ :

Чтобы запретить ключ, необходимо установить событие как обработанное:

if (e.Key == Key.E)
{
    e.Handled = true;
    MessageBox.Show($"{e.Key.ToString()} is forbidden");
}
...