Как удалить клавишу удаления в С#?

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

Ответ 1

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

            <ListView.InputBindings>
                <KeyBinding Command="{Binding COMMANDTORUN}"
                            Key="KEYHERE" />
            </ListView.InputBindings>

Ответ 2

Для 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

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

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

Ответ 4

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

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

Для Windows Forms:

if (e.KeyCode == Keys.Delete)
{
   e.Handled = false;
}

Ответ 5

Я перепробовал все вышеперечисленное, но у меня ничего не получалось, поэтому я публикую то, что на самом деле делал и работал, в надежде помочь другим с той же проблемой, что и я:

В коде файла xaml добавьте обработчик событий в конструктор:

using System;
using System.Windows;
using System.Windows.Input;
public partial class NewView : UserControl
    {
    public NewView()
        {
            this.RemoveHandler(KeyDownEvent, new KeyEventHandler(NewView_KeyDown)); 
            // im not sure if the above line is needed (or if the GC takes care of it
            // anyway) , im adding it just to be safe  
            this.AddHandler(KeyDownEvent, new KeyEventHandler(NewView_KeyDown), true);
            InitializeComponent();
        }
     //....
      private void NewView_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Delete)
            {
                //your logic
            }
        }
    }