Perbedaan acara berdasarkan kunci dengan Return dan Intro di WPF

Menggunakan Sap Business One saya menyadari mereka membuat perbedaan antara tombol intro (keyboard numerik) dan tombol enter/return. Acara yang diangkat berbeda-beda tergantung mana yang saya tekan. Itu membuat saya berpikir saya dapat mengontrol kedua peristiwa tersebut secara terpisah.

Di C# saya dapat mengatur acara keydown menggunakan metode ini:

static void KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        // my code here
        e.Handled = true;
    }
}

Satu-satunya masalah adalah saya mendapatkan hasil yang sama tidak peduli tombol mana yang saya tekan. Ada dua nilai, Enter dan Return, untuk Key enum, keduanya memiliki nilai yang sama: 6. Saya mencoba memeriksa setiap properti untuk KeyEventArgs tetapi saya tidak dapat menemukan perbedaan apa pun.

Apakah mungkin mengetahui tombol mana yang ditekan pengguna?


person Antonio Rodríguez    schedule 18.01.2021    source sumber


Jawaban (1)


Ada properti IsExtendedKey yang disetel ke true untuk kunci Numpad Enter.

Ini internal, jadi Anda harus menggunakan refleksi untuk mendapatkan nilainya:

static void KeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        PropertyInfo pi = typeof(KeyEventArgs)
            .GetProperty("IsExtendedKey", BindingFlags.NonPublic | BindingFlags.Instance);
        if (pi != null && (bool)pi.GetValue(e) == true)
        {
            MessageBox.Show("Into key was pressed!");
        }
        else
        {
            MessageBox.Show("Enter key was pressed!");
        }
    }
}
person mm8    schedule 18.01.2021
comment
Berhasil! Dimungkinkan juga untuk menggunakannya untuk tombol Home atau End, tetapi tidak untuk operator atau Desimal karena alasan tertentu. Saya bertanya-tanya mengapa properti ini bersifat internal dan bukan publik. - person Antonio Rodríguez; 19.01.2021