ความแตกต่างของเหตุการณ์ตามคีย์พร้อม Return และ Intro ใน WPF

การใช้ Sap Business One ทำให้ฉันตระหนักว่าพวกเขาสร้างความแตกต่างระหว่างปุ่มเริ่มต้น (แป้นพิมพ์ตัวเลข) และปุ่ม Enter/Return กิจกรรมที่เกิดขึ้นจะแตกต่างกันไปขึ้นอยู่กับกิจกรรมที่ฉันกด นั่นทำให้ฉันคิดว่าฉันสามารถควบคุมทั้งสองเหตุการณ์แยกกันได้

ใน C# ฉันสามารถตั้งค่าเหตุการณ์การกดคีย์โดยใช้วิธีนี้:

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

ปัญหาเดียวคือฉันได้ผลลัพธ์ที่เหมือนกันไม่ว่าฉันจะกดคีย์ใดก็ตาม มีสองค่า Enter และ Return สำหรับ Key enum ทั้งคู่มีค่าเท่ากัน: 6. ฉันพยายามตรวจสอบทุกคุณสมบัติสำหรับ KeyEventArgs แต่ไม่พบความแตกต่างเลย

เป็นไปได้ไหมว่าผู้ใช้กดคีย์ไหน?


person Antonio Rodríguez    schedule 18.01.2021    source แหล่งที่มา


คำตอบ (1)


มีคุณสมบัติ IsExtendedKey ที่ได้รับการตั้งค่าเป็น true สำหรับแป้น Numpad Enter

มันคือ internal ดังนั้น คุณจะต้องใช้การสะท้อนกลับเพื่อให้ได้ค่าของมัน:

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
มันได้ผล! นอกจากนี้ยังสามารถใช้เป็นปุ่ม Home หรือ End ได้ แต่ไม่ใช่สำหรับตัวดำเนินการหรือ Decimal ด้วยเหตุผลบางประการ ฉันสงสัยว่าเหตุใดทรัพย์สินนี้จึงเป็นทรัพย์สินภายในและไม่ใช่ที่สาธารณะ - person Antonio Rodríguez; 19.01.2021