2016-05-30 75 views
1

我正试图完成我的最终学校项目。我正在创建一个c#winform游戏具体。我们不能使用其他任何东西。 我不会在这里发布代码,因为我弄错了,我猜你可以用这个信息回答我。C#:KeyDown事件在控件中不起作用

设置:

我得到了我的程序设置如下。这是主窗体和两个用户控件。我在游戏过程中切换主要形式的控件。第一个是MENU和第二个是GUI与picturebox作为gamescene

问题:

设置相当不重要,我猜。但我需要做的是做一些动作时,我按键上第一控制处于活动状态时形式)。听起来很容易我想起初,但onKeyDown事件在menu.cs(第一个用户控件)没有做什么,当我按下键(事件方法不是空白)。我试过this.previewKey = true;在菜单加载方法,但它甚至没有认出它。 所以我的问题是:有没有办法在usercontrols代码中使用onKeyDown?

我这样做的becouse我使用相同的密钥在第二控制和我不希望它变得混乱(这显然做了oposite 呵呵

TLDR:需要使用的onkeydown事件用户控件(的KeyPreview可能是关键)

BONUS
我还需要以某种方式从续链接变量rols 1的形式和控制2. 我查了一下,发现它会很容易像“Form to Form”一样在situacion中,但是由于它是userControls,我无法弄清楚,我觉得我只是从整理(感觉可怕的坐在这里9小时xD请帮忙)

回答

0

在keypress事件中确保它是用于选定的控件而不是主窗体。如果您正在捕获表单以确定哪个键被按下,那么请使用keypress事件。您可以使用消息框来验证您是否拥有正确的控件。每个键都有一个整数值,您可以通过使用e的属性来访问和使用这些键。

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

+0

非常感谢你:)我将看看明天和类型如何去! –

+0

我只是很快看到并意识到,当我在这些控件中的按钮关键事件不起作用。你知道任何方式吗?它感觉像我最后点击的按钮(或第一个,如果我没有点击)是recievent keyboar输入等待输入,选项卡或空间被按下。不知道你是否可以在这里跟随我。我不是很深入的程序员。感谢你的努力,如果你能回答我:) –

+0

改变控制的形式 – Shon

0

您必须在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"); 
} 
+0

我通过设计师的事件窗口做到了,所以我认为它会注册自己。非常感谢。今天我回家时会看看。 –

+0

是的,如果你在设计器中做过,事件就会自行注册。 – Nayde