削除キーの押下をキャプチャし、キーが押されたときに何もしません。WPFおよびWindowsフォームでこれを行うにはどうすればよいですか?
5 に答える
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
。
キーのデフォルト アクションが実行されないようにする場合は、e.Handled = true
上記のように設定します。WinFormsでもWPFでも同じ
WPFについてはわかりませんが、 WinformsのイベントKeyDown
ではなく、イベントを試してみてくださいKeyPress
。
Control.KeyPress に関するMSDN の記事、具体的には「文字以外のキーでは KeyPress イベントは発生しませんが、文字以外のキーでは KeyDown イベントと KeyUp イベントが発生します」というフレーズを参照してください。
key_press
特定のコントロールのorKey_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
}
}
}