Я хочу захватить нажатия клавиш удаления и ничего не делать при нажатии клавиши. Как я могу сделать это в WPF и Windows Forms?
Как зафиксировать нажатие клавиши удаления в С#?
Ответы (5)
При использовании MVVM с WPF вы можете фиксировать нажатия клавиш в XAML с помощью привязок ввода.
<ListView.InputBindings>
<KeyBinding Command="{Binding COMMANDTORUN}"
Key="KEYHERE" />
</ListView.InputBindings>
Modifiers="Control"
- person creativeDev; 29.03.2018
Для 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
Keyboard.Modifiers
.
- person ChrisF; 27.08.2011
Я не знаю о WPF, но попробуйте событие KeyDown
вместо события KeyPress
для Winforms.
См. статью MSDN об управлении .KeyPress, в частности, фраза «Событие KeyPress не вызывается несимвольными клавишами, однако несимвольные клавиши вызывают события KeyDown и KeyUp».
Просто проверьте обработчик событий key_press
или Key_Down
на конкретном элементе управления и проверьте, как для WPF:
if (e.Key == Key.Delete)
{
e.Handle = false;
}
Для Windows-форм:
if (e.KeyCode == Keys.Delete)
{
e.Handled = false;
}
Я пробовал все, что упоминалось выше, но у меня ничего не получилось, поэтому я публикую то, что я на самом деле сделал и работал, в надежде помочь другим с той же проблемой, что и я:
В код программной части файла 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
}
}
}