Deleteキーの押下をキャプチャし、キーが押されても何もしません。 WPFおよびWindowsフォームでこれを行うにはどうすればよいですか?
WPFでMVVMを使用する場合、入力バインディングを使用してXAMLでキーが押された状態をキャプチャできます。
<ListView.InputBindings>
<KeyBinding Command="{Binding COMMANDTORUN}"
Key="KEYHERE" />
</ListView.InputBindings>
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
をオンにすることを忘れないでください。
キーのデフォルトアクションが実行されないようにする場合は、set e.Handled = true
上記のように。 WinFormsとWPFでも同じです
WPFについてはわかりませんが、WinformsのKeyDown
イベントの代わりにKeyPress
イベントを試してください。
Control.KeyPressの MSDNの記事 を参照してください。具体的には、「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
}
}
}