似乎存在如何处理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。