C#:KeyDown事件在控件

时间:2016-05-30 22:18:06

标签: c# winforms object user-controls

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

设定:

我的程序设置如下。主要形式和两个用户控件。我在游戏过程中在主窗体中切换这些控件。第一个是 MENU ,第二个是 GUI ,其中picturebox充当 gamescene

问题:

我觉得设置并不重要。但我需要做的是当我按下 < / strong>在表格中)。我一开始觉得很容易,但是当我按下键时, menu.cs (第一个用户控件)中的 onKeyDown 事件无效。事件方法不是空白的)。我试过这个.previewKey = true;在 菜单 加载方法中,但它甚至无法识别它。 所以我的问题是:有没有办法在usercontrols代码中使用onKeyDown?

我是这样做的,因为我在第二个控件中使用相同的键,我不想让它变得混乱(显然这对象是呵呵

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

奖金
我还需要以某种方式将控件1中的变量链接到Form和Controls 2。 我查了一下,发现它很容易就像“Form to Form”一样,但是因为它是userControls,我无法弄清楚它,我觉得我只是一点点完成它。(感觉很可怕坐在这里9小时xD请帮忙)

2 个答案:

答案 0 :(得分:0)

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

的属性访问和使用它们

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

答案 1 :(得分:0)

您必须在Form.Designer.cs中注册该事件:

!

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

var result = 
    from a in db.table
    where a.type == "dataSet"
        && !db.table.Any(b => b.type == "backupSet"
            && b.name == a.name && b.date == a.date)
    select new DataObject
    {
         ...
    };