Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 截取游戏命令的按钮_C#_Winforms_Button_Focus_Controls - Fatal编程技术网

C# 截取游戏命令的按钮

C# 截取游戏命令的按钮,c#,winforms,button,focus,controls,C#,Winforms,Button,Focus,Controls,我在winforms中制作了一个简单的游戏,将c#作为我高中c#课程的最后一个项目 游戏已经完成,但我只想添加一些次要功能,如重置和更改模式的按钮等。但当我添加这些按钮时,它们会“控制”箭头键,我的“玩家”不再响应箭头键,因为这会将焦点从一个按钮移动到另一个按钮 你知道当它们变成浅蓝色并被“标记”时 那么stack,我该如何解决这个问题 编辑以澄清: 当窗体上没有按钮或“button1.enabled=false;”时,玩家可以完美移动 当一个按钮从工具箱或“button1.enabled=tr

我在winforms中制作了一个简单的游戏,将c#作为我高中c#课程的最后一个项目

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

你知道当它们变成浅蓝色并被“标记”时

那么stack,我该如何解决这个问题

编辑以澄清:

当窗体上没有按钮或“button1.enabled=false;”时,玩家可以完美移动 当一个按钮从工具箱或“button1.enabled=true;”添加到表单上时,玩家根本不移动

当按钮在窗体上时,播放器不会移动,因为用于控制播放器的箭头键现在用于在按钮之间“滚动”,然后高亮显示

编辑2:


这就是我所说的突出显示或标记的意思。箭头键只是将标记从按钮1移动到按钮2

按钮很可能会从
表单
中窃取焦点

另一种选择是,如果您没有挂断使用按钮,您可以在
表单中添加
菜单提示
,并添加“重置”、“更改模式”等菜单项

当用户关闭菜单时,焦点应返回表单。它的优点是将选项移开,而不是用多个按钮将屏幕弄得乱七八糟。

您可以使用它来处理您关心的按键,并覆盖它们的焦点改变行为:

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

我们需要看一个例子来说明你的意思。您的问题是按钮正在聚焦,您可以尝试将
this.Focus()
作为按钮处理程序中的最后一行,将焦点返回给表单。但是没有一个简单的例子,很难给出一个解决方案。我可以为你上传.exe,你可以明白我的意思吗?你不能在这里上传文件,我们不希望你上传到另一个网站链接到这里。我们需要一个错误的列表。尝试将按钮上的“TabStop”设置为false。这是某个地方问题的副本,如果我能找到它,我将链接…好的,我将编辑主要帖子。为“SetFeatureToAllControls”提供错误信息。我是一名c#初学者。我可能遗漏了什么吗?@Burmeister我错了,检查编辑的代码。恐怕不行。这样,当按下任何箭头键但播放机仍不移动时,按钮1的高光不会变为按钮2。值得一提的是,玩家是一个标签?你在哪里听箭头事件移动玩家?我的代码可能正在抑制您的事件处理程序;我不熟悉MenuStrips的工作原理,但我可能会研究一下。非常感谢。MenuStrip解决了这个问题。谢谢你,格兰特!