如何在C#中捕获删除键按?

时间:2010-05-23 21:03:12

标签: c# wpf winforms keyboard-events

我希望捕获删除键按下,并在按下键时不执行任何操作。如何在WPF和Windows窗体中执行此操作?

5 个答案:

答案 0 :(得分:28)

将MVVM与WPF一起使用时,您可以使用输入绑定捕获XAML中的按键。

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

答案 1 :(得分:17)

对于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中是一样的

答案 2 :(得分:3)

我不了解WPF,但是为Winforms尝试KeyDown事件而不是KeyPress事件。

请参阅Control.KeyPress上的MSDN article,特别是短语“KeyPress事件不是由非字符键引发的;但是,非字符键确实会引发KeyDown和KeyUp事件。”

答案 3 :(得分:2)

只需检查特定控件上的key_pressKey_Down事件处理程序,然后检查WPF:

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

对于Windows窗体:

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

答案 4 :(得分:1)

我尝试了上面提到的所有内容,但对我没有任何帮助,所以我张贴了我的实际工作内容,以期希望帮助其他与我有相同问题的人

在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
            }
        }
    }