web-dev-qa-db-ja.com

C#でDeleteキーの押下をキャプチャする方法は?

Deleteキーの押下をキャプチャし、キーが押されても何もしません。 WPFおよびWindowsフォームでこれを行うにはどうすればよいですか?

10
thuaso

WPFでMVVMを使用する場合、入力バインディングを使用してXAMLでキーが押された状態をキャプチャできます。

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

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でも同じです

17
ChrisF

WPFについてはわかりませんが、WinformsのKeyDownイベントの代わりにKeyPressイベントを試してください。

Control.KeyPressの MSDNの記事 を参照してください。具体的には、「KeyPressイベントは文字以外のキーでは発生しませんが、文字以外のキーではKeyDownイベントとKeyUpイベントが発生します。」

3

特定のコントロールのkey_pressまたはKey_Downイベントハンドラーを確認し、WPFのように確認するだけです。

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

Windowsフォームの場合:

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

私は上記のすべてのものを試しましたが、何もうまくいきませんでした。私と同じ問題で他の人を助けることを期待して、私が実際に行って働いたことを投稿します。

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