2017-02-02 3 views
0

私のプロジェクトでは、ゲームのレイアウトを変更するためにこの既製のコードを変更する必要があります。だから私は、蛇を動かすためにボタンを使うのではなく、WASDへのナビゲーションのために私のフォームにキーイベントを追加したい。しかし、ここでの問題は、フォームに関数を追加してコンソールに表示するようにテストすると、イベントエラーではなく何も得られないということです。私はこれについて専門家ではないので、私は正しい道に私を導くのに十分親切な誰かが、ありがとう。winformの主なイベントの問題C#

これは私のプロジェクトのコードとスクリーンショットです。

public Form1() 
    { 
     InitializeComponent(); 

     backgroundMusic.PlayLooping(); 


     this.AutoSize = true; 
     boardPanel.AutoSize = true; 

     //Set up the main board 
     mainBoard = new Board(this); 

     //Set up the game timer at the given speed 
     clock = new Timer(); 
     clock.Interval = speed; //Set the clock to tick every 500ms 
     clock.Tick += new EventHandler(refresh); //Call the refresh method at every tick to redraw the board and snake. 

     duration = 0; 
     score = 0; 
     level = 1; 
     modeLBL.Text = mode; 

     gotoNextLevel(level); 

    } 

    private void keyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyData == Keys.W) 
     { 
      Console.WriteLine("W is pressed"); 
     } 
    } 
} 

フォームのデザインビュー。 Design view of the form

+0

Form子コントロールにフォーカスがあるときにキーが押されたときKeyDownイベントを発生させるあなた有効にするには、trueにごFormKeyPreviewプロパティを設定しますthis.KeyDown = new KeyEventHandler(keyDown); ' –

答えて

3

通常、FormControlのいずれかにフォーカスがあり、すべてのキーイベントがキャプチャされるという問題があります。あなたが実際にハンドラを `登録していない

public Form1() 
{ 
    InitializeComponent(); 

    backgroundMusic.PlayLooping(); 

    this.AutoSize = true; 
    this.KeyPreview = true; // <-- add this line 
+0

これは正解であるはずです。 KeyPreview – Stavm

+0

あなたの素早い応答のおかげで、まず私は 'keyPreview'を検索しようとしましたが、どこにも見つからなかったので、今私はそれを入力する必要があることを知っていますフォームのプロパティメニューから見るのではなく、コードそのものです。 haha .. – Jatiz

+0

@Jatizしかし、実際にフォームのプロパティウィンドウにあります: "IsMdiContainer"と "Language"の間の "KeyPreview"(アルファベット順にソートされている場合)。 –