WPF中的Return和Intro按键区分事件

Posted

技术标签:

【中文标题】WPF中的Return和Intro按键区分事件【英文标题】:Event distinction by key with Return and Intro in WPF 【发布时间】:2021-04-22 22:06:03 【问题描述】:

使用 Sap Business One,我意识到他们区分了介绍键(数字键盘)和输入/返回键。引发的事件会有所不同,具体取决于我按哪一个。这让我觉得我可以分别控制这两个事件。

在 C# 中,我可以使用此方法设置 keydown 事件:

static void KeyDown(object sender, KeyEventArgs e)

    if (e.Key == Key.Enter)
    
        // my code here
        e.Handled = true;
    

唯一的问题是,无论我按哪个键,我都会得到完全相同的结果。 Key 枚举有两个值,Enter 和 Return,两者的值相同:6。我尝试检查 KeyEventArgs 的每个属性,但找不到任何区别。

是否可能知道用户按下了哪个键?

【问题讨论】:

【参考方案1】:

有一个IsExtendedKey 属性被设置为true 用于数字小键盘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!");
        
    

【讨论】:

有效!也可以将它用于 Home 或 End 键,但由于某种原因不能用于运算符或 Decimal。我想知道为什么这个属性是内部的而不是公开的。

以上是关于WPF中的Return和Intro按键区分事件的主要内容,如果未能解决你的问题,请参考以下文章

刚刚开始学COCOS2D,在CCMenu中的菜单按键事件中,有按下的效果,但是没有回调按键指定的函数,求教啊~~

在我的 WPF 应用程序中捕获没有焦点的按键事件

WPF学习第十六章 键盘输入

WPF学习第十六章 键盘输入

WinForm中的键盘按键 KeyDown,KeyPress和KeyUp事件

MVVM设计模式和在WPF中的实现 事件绑定