C#:KeyDown 事件在控件中不起作用

C#: KeyDown Event does not work in controls

我正在努力完成我的期末学校项目。具体来说,我正在创建一个 c# winform 游戏。我们不能使用任何其他东西。 我不会在这里发布代码,因为我把它弄得一团糟,我想你可以用这个信息回答我。

设置:

我的程序是这样设置的。这是主窗体和两个用户控件。我在游戏期间在主窗体中切换这些控件。第一个是 MENU,第二个是 GUI,图片框作为 gamescene

问题:

我想设置并不重要。但是我需要做的是当我在第一个Control按下键时做一些动作(在表单中处于活动状态时)。一开始我觉得听起来很简单,但是 menu.cs 中的 onKeyDown 事件(第一个用户控件) 当我按下键时什么都不做(事件方法不是空白)。我试过 this.previewKey = true;在 menu 加载方法中,但它甚至没有识别它。 所以我的问题是:有什么方法可以在用户控件代码中使用 onKeyDown 吗?

我这样做是因为我在第二个控件中使用相同的键并且我不想让它变得混乱(这显然是相反的 huh

TLDR: 需要在 userControls 中使用 onKeyDown 事件(keyPreview 可能是关键)

奖金
我还需要以某种方式 link 从 Controls 1 到 Form 和 Controls 2 的变量。 我查了一下,发现它在 "Form to Form" 这样的情况下很容易,但是因为它是 userControls 我无法弄清楚,我觉得我离完成它只有一点点。(在这里坐 9 个小时感觉很糟糕xD 请帮忙)

在按键事件上确保它是针对所选控件而不是主窗体。如果您正在捕获表单以确定按下了哪个键,则为此使用按键事件。您可以使用消息框来验证您是否拥有正确的控件。每个键都有一个整数值,您可以通过使用 e.

的属性来访问和使用它们

奖金。根据您实现代码的方式,您将不得不使用全局变量跨表单传递数据或使用委托来主动访问和设置另一个表单上的控件

您必须在 Form.Designer.cs 中注册活动:

private void InitializeComponent()
{          
    // Your form properties here

    this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.Form1_KeyDown);
}

您的 KeyDown 事件可以在 Form.cs 代码中像这样使用:

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
     // To know if your event is working and the value of the key who's pressed
     MessageBox.Show("Key Pressed = "
                   + e.KeyCode.ToString()
                   + ", Value = "
                   + e.KeyValue.ToString());

     // Example - add some actions bellow
     if (e.KeyValue == 13)
         MessageBox.Show("Return Key Pressed");
}