【问题标题】:Buttons intercepting commands for game [closed]拦截游戏命令的按钮[关闭]
【发布时间】:2014-05-31 20:47:02
【问题描述】:

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

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

您知道它们何时变成浅蓝色并被“标记”。

那么堆栈,我该如何解决这个问题?

编辑澄清:

当表单上没有按钮或“button1.enabled = false;”时,玩家移动完美 当从工具箱或“button1.enabled = true;”将按钮添加到表单上时,播放器根本不会移动,

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

编辑2:

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

【问题讨论】:

  • 我们需要看一个例子来说明你的意思。您的问题是按钮正在获取焦点,您可以尝试将 this.Focus() 作为按钮处理程序中的最后一行,以将焦点返回给表单。但是没有一个简短的例子,很难给出解决方案。
  • 我可以为你上传.exe,你明白我的意思了吗?
  • 您不能在这里上传文件,我们也不希望您上传到其他网站链接到这里。我们需要一个short minimal example 来说明问题所在。
  • 尝试将按钮上的“TabStop”设置为 false。这是某处问题的重复,如果我能找到它,我会链接...
  • 好的,我将编辑主帖。

标签: c# winforms button focus controls


【解决方案1】:

Buttons 很可能将注意力从您的 Form 上转移开。

作为替代方案,如果您不喜欢使用按钮,您可以将MenuStrip 添加到您的Form 并为“重置”“添加菜单项改变模式”

当您的用户关闭菜单时,焦点应该返回到表单。它还有一个优势,那就是让选项不碍事,而不是用多个按钮弄乱屏幕。

【讨论】:

  • 我不熟悉 MenuStrips 的工作原理,可能会调查一下。谢谢!
  • MenuStrip 解决了这个问题。谢谢格兰特!
【解决方案2】:

您可以使用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;
    }
}

【讨论】:

  • “SetFeatureToAllControls”给我错误。我是一个 c# 初学者,我可能会遗漏什么吗?
  • @Burmeister 我的错,检查编辑的代码。
  • 恐怕不行。这确实使得按钮 1 的突出显示不会更改为按钮 2,当按下任何箭头键但玩家仍然没有移动时。值得一提的是,玩家是一个标签?
  • 你在哪里监听箭头事件来移动玩家?可能是我的代码抑制了您的事件处理程序。
  • 使用布尔值和计时器使用 if (right = true) player.left += 5;
猜你喜欢
  • 1970-01-01
  • 2016-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-23
  • 2013-01-21
相关资源
最近更新 更多