按钮拦截游戏命令

时间:2014-04-16 19:35:02

标签: c# winforms button focus controls

我使用c#作为我在高中的c#课程的最终项目,在winforms中做了一个简单的游戏。

游戏已经完成,但我只是想添加一些次要功能,例如重置和更改模式等按钮。但是当我添加这些按钮时,它们会“控制”箭头键并且我的“播放器”没有响应因为箭头键将焦点从1个按钮移动到另一个按钮。

你知道他们什么时候变成浅蓝色并且被“标记”了。

所以堆叠,我该如何解决这个问题?

编辑以澄清:

当表单上没有按钮或“button1.enabled = false;”时,播放器移动完美 当工具箱中的按钮添加到表单或“button1.enabled = true;”时,播放器doenst完全移动,

当按钮在窗体上时,播放器不会移动,因为用于控制播放器的箭头键现在用于“滚动”按钮并突出显示。

EDIT2:

我的意思是突出显示或标记。箭头键只是将标记从按钮1移到按钮2。http://puu.sh/8bmn2.png

2 个答案:

答案 0 :(得分:1)

Button很可能会将注意力从您的Form上移开。

作为替代方案,如果您没有使用按钮,可以在MenuStrip添加Form并添加“重置”的菜单项, “更改模式”

当您的用户关闭菜单时,焦点应返回到表单。它的优势在于可以将选项排除在外,而不是使用多个按钮使屏幕变得杂乱。

答案 1 :(得分:0)

您可以使用preview events来处理您关注的按键并覆盖其改变焦点的行为:

private void Form1_Load(object sender, EventArgs e)
{
    SetPreviewKeyDownToAllControls(this.Controls);    
}

private void SetPreviewKeyDownToAllControls(Control.ControlCollection cc)
{
    if (cc != null)
    {
        foreach (Control control in cc)
        {
            control.PreviewKeyDown += new PreviewKeyDownEventHandler(control_PreviewKeyDown);
            SetPreviewKeyDownToAllControls(control.Controls);
        }
    }
}

void control_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down || e.KeyCode == Keys.Left || e.KeyCode == Keys.Right)
    {
        e.IsInputKey = true;
    }
}