检查键盘输入Winforms

时间:2016-08-29 14:08:22

标签: 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

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

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

2 个答案:

答案 0 :(得分:1)

由于您通常希望在按下某个键后立即执行操作,因此通常使用<liferay-ui:message key="results.noresults"/> 事件就足够了。

但是在某些情况下,我想你想检查特定键是否在某个进程的中间停止,因此你可以这样使用GetKeyState方法:

KeyDown

您应该知道,每次使用例如[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)

答案 1 :(得分:0)

这是你在找什么?

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

现在从此类而不是Form类派生您的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
        }
    }
}

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