Я хочу захватить нажатия клавиш нажатия клавиш и ничего не делать при нажатии клавиши. Как это сделать в 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
}
}
}