不正确,丢失和重复的按键事件

时间:2013-03-08 02:00:30

标签: c# winforms mono

似乎存在如何处理OS X实现键盘事件的错误。当快速连续按下多个按键或同时按下多个按键时,错误就会显现出来。

如果我同时按下'J''K''L'按键,在Win7上运行我的应用程序,我总能获得所有三个键(尽管没有按任何特定顺序)。但是在OS X上,在运行Windows Forms应用程序时,我可以获得“JJJ”或“JKK”或“LLL”。 OS X中没有其他任何地方表现出这种行为(本机Cocoa应用程序,例如TextEdit,与Win7的行为相同)。

源代码:(在Visual Studio中,创建一个Windows窗体项目,并编辑Form1的代码):

public partial class Form1 : Form
{
    public Form1(){
        InitializeComponent();
        KeyPress += Form1_KeyPress;
        KeyDown += Form1_KeyDown;}
    void Form1_KeyDown(object sender, KeyEventArgs e)
        {Console.WriteLine("KeyDown: " + e.KeyCode.ToString());}
    void Form1_KeyPress(object sender, KeyPressEventArgs e)
        {Console.WriteLine("KeyPress: " + e.KeyChar.ToString());}
}

在Windows 7上运行(一次点击JKL):

KeyDown: L
KeyPress: l
KeyDown: J
KeyPress: j
KeyDown: K
KeyPress: k

在OS X上运行(一次点击JKL;注意可能需要几次尝试)

KeyDown: L
KeyPress: k
KeyDown: J
KeyPress: k
KeyDown: K
KeyPress: k

如果你错过了,所有的KeyPress事件都是'k',结果是'kkk'。那是为什么?

更新:我在Mountain Lion上运行Mono 2.10.10。

0 个答案:

没有答案