【问题标题】:Using arrow keys to invoke methods C#使用箭头键调用方法 C#
【发布时间】:2014-03-01 23:38:24
【问题描述】:

我正在用 C# 为一个大学项目制作一个简单的游戏,目前玩家通过四个方向按钮进行控制。我想添加事件侦听器,以便我可以使用箭头键来控制游戏。

我在网上搜索并在这里遇到了类似的问题,但是我无法使我找到的任何东西都能工作,例如:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{          
    if (e.KeyCode.Equals(Keys.Left))
    {
        directionleft();
        e.Handled = true;
        return;
    }
}

如果有人能够阐明如何正确使用事件侦听器,我将不胜感激,谢谢。

【问题讨论】:

  • 什么不起作用?有什么例外吗?
  • 在使用我之前放的代码时,什么都没有发生,也没有抛出异常。

标签: c# winforms events listener arrow-keys


【解决方案1】:

您需要将焦点设置在表单上,​​否则它将无法收听击键。如果您希望即使您的表单没有输入焦点也能检测到键盘输入,请使用Keyboard hook

【讨论】:

    【解决方案2】:

    您可以覆盖ProcessCmdKey

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {         
        if (keyData == Keys.Left)
        {
            directionleft();
            return true;
        }
    
        return base.ProcessCmdKey(ref msg, keyData);
    }
    

    【讨论】:

    • 我刚刚用它来容纳所有箭头键,而且效果很好,你能解释一下它在做什么吗?
    • ProcessCmdKey 在获得焦点的控件之前处理按键。这就是我们返回 true 的原因(告诉有焦点的控件我们已经处理了按键,所以它不应该做任何事情)。此事件会冒泡到更熟悉的事件,例如 KeyDown。由于它不是特定于控件的,因此无论哪个控件具有焦点,都会在 WinForm 对象中调用它。如果只想在Form有焦点的时候处理,可以使用KeyDown,但也可能需要将form的KeyPreview属性设置为true
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 2021-11-01
    • 2013-10-01
    相关资源
    最近更新 更多