C# 检查键盘输入Winforms

C# 检查键盘输入Winforms,c#,.net,winforms,keyevent,C#,.net,Winforms,Keyevent,我想知道如果你不这样做 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 我在这里坐了很久,想知道怎么做。但我就是不能把我的头围绕着它 如果您想知道,我的计划

我想知道如果你不这样做

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,以检查输入。

这就是您想要的吗

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
}


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

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类派生您的
表单
类,并使用如下函数:

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
        }
    }
}

我希望这就是您想要的。

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

但在某些情况下,我假设您想检查某个进程中某个特定键是否处于关闭状态,所以您可以这样使用该方法:

[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

我希望消除对KeyEventArgs的需要,。。。我更喜欢If(KeyCode(Keys.A))而不是If(KeyCode(Keys.A))始终使用事件。您将要犯一个严重的UI编程错误。我共享了一个
IsKeyDonw
方法,可以让您检查某个键是否已关闭。该方法可能很有用,例如,或。但您肯定不应该忘记获取输入的正确方法。只需在需要时使用这些方法。