Как захватить удаление нажатия клавиши в C #? - PullRequest
10 голосов
/ 24 мая 2010

Я хочу записывать нажатия клавиш удаления и ничего не делать при нажатии клавиши. Как я могу сделать это в WPF и Windows Forms?

Ответы [ 4 ]

28 голосов
/ 10 сентября 2012

При использовании MVVM с WPF вы можете захватывать нажатие клавиш в XAML с помощью привязок ввода.

            <ListView.InputBindings>
                <KeyBinding Command="{Binding COMMANDTORUN}"
                            Key="KEYHERE" />
            </ListView.InputBindings>
17 голосов
/ 24 мая 2010

Для WPF добавьте обработчик KeyDown:

private void Window_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Delete)
    {
        MessageBox.Show("delete pressed");
        e.Handled = true;
    }
}

Что почти так же, как для WinForms:

private void Window_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Delete)
    {
        MessageBox.Show("delete pressed");
        e.Handled = true;
    }
}

И не забудьтечтобы включить KeyPreview.

Если вы хотите, чтобы действие клавиш по умолчанию не выполнялось, установите e.Handled = true, как показано выше.То же самое в WinForms и WPF

3 голосов
/ 24 мая 2010

Я не знаю о WPF, но попробуйте событие KeyDown вместо события KeyPress для Winforms.

См. Статью MSDN о Control.KeyPress, в частности фразу «Событие KeyPress не вызывается не символьными ключами; однако нехарактерные ключи вызывают события KeyDown и KeyUp.»

2 голосов
/ 24 мая 2010

Просто проверьте обработчик событий key_press или Key_Down на конкретном элементе управления и проверьте, как для WPF:

if (e.Key == Key.Delete)
{
   e.Handle = false;
}

Для Windows Forms:

if (e.KeyCode == Keys.Delete)
{
   e.Handled = false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...