当前位置:  开发笔记 > 编程语言 > 正文

在C#中捕获多个关键点

如何解决《在C#中捕获多个关键点》经验,为你挑选了2个好方法。

在Windows窗体表单中工作时,如何在C#中捕获多个键?

我似乎无法同时获得向上箭头和向右箭头.



1> Frederik Ghe..:

我认为当你使用GetKeyboardState API函数时,你会感觉最好.

[DllImport ("user32.dll")]
public static extern int GetKeyboardState( byte[] keystate );


private void Form1_KeyDown(object sender, KeyEventArgs e)
{
   byte[] keys = new byte[256];

   GetKeyboardState (keys);

   if ((keys[(int)Keys.Up] & keys[(int)Keys.Right] & 128 ) == 128)
   {
       Console.WriteLine ("Up Arrow key and Right Arrow key down.");
   }
}

在KeyDown事件中,您只需要询问键盘的"状态".GetKeyboardState将填充您提供的字节数组,此数组中的每个元素都表示键的状态.

您可以使用每个虚拟键代码的数值访问每个键状态.当该键的字节设置为129或128时,表示该键已关闭(按下).如果该键的值为1或0,则键处于启动状态(未按下).值1用于切换键状态(例如,大写锁定状态).

有关详细信息,请参阅GetKeyboardState的Microsoft文档.



2> Tormod Fjeld..:

一个小概念验证代码,假设Form1包含label1:

private List pressedKeys = new List();

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    pressedKeys.Add(e.KeyCode);

    printPressedKeys();
}

private void Form1_KeyUp(object sender, KeyEventArgs e)
{
    pressedKeys.Remove(e.KeyCode);

    printPressedKeys();
}

private void printPressedKeys()
{
    label1.Text = string.Empty;
    foreach (var key in pressedKeys)
    {
        label1.Text += key.ToString() + Environment.NewLine;
    }
}

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有