2016-05-30 42 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