检查键盘输入Winforms

我想知道是否而不是这样做

protected override void OnKeyDown(KeyEventArgs e) { if (e.KeyCode == Keys.A) Console.WriteLine("The A key is down."); } 

我可以设置一个bool方法并执行此操作:

 if(KeyDown(Keys.A)) // do whatever here 

我一直坐在这里试图弄清楚怎么做。 但我无法绕过它。

如果你想知道,我的计划是在一个不同的方法中调用bool来检查输入。

由于您通常希望在按下某个键后立即执行操作,因此通常使用KeyDown事件就足够了。

但在某些情况下,我想你想要检查一个特定键是否在某个进程的中间关闭,所以你可以这样使用GetKeyState方法:

 [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)] public static extern short GetKeyState(int keyCode); public const int KEY_PRESSED = 0x8000; public static bool IsKeyDown(Keys key) { return Convert.ToBoolean(GetKeyState((int)key) & KEY_PRESSED); } 

您应该知道,每次使用例如IsKeyDown(Keys.A)检查密钥状态时,如果在检查状态时按下该键,则该方法返回true

这是你想要的?

 private bool KeyDown(KeyEventArgs e, Keys key) { if(e.KeyCode == key) return true; return false; } 

然后就像使用它一样

 protected override void OnKeyDown(KeyEventArgs e) { if(KeyCode(e, Keys.A)) { //do whatever } else if (KeyCode (e, Keys.B)) { //do whatever } // so on and so forth } 

HTH。


根据您的评论 ,以下代码将起作用。 但请记住,不建议将其用于面向对象的设计。

 class FormBase: Form { private Keys keys; protected override void OnKeyDown(KeyEventArgs e) { keys = e.KeyCode; } protected bool KeyDown(Keys key) { if(keys == key) return true; return false; } } 

现在从这个类而不是System.Windows.Forms.Form类派生你的Form类,并使用如下函数:

 public class MyForm: FormBase { protected override void OnKeyPress(KeyEventArgs e) { if(KeyDown(Keys.A)) { //do something when 'A' is pressed } else if (KeyDown(Keys.B)) { //do something when 'B' is pressed } else { //something else } } } 

我希望这就是你要找的东西。