2016-07-30 8 views
0

私はVisual C#、 でVB 2013で自分自身を改善するために2Dゲーム(pacman)を開発しており、特定のボタンをクリックしてキーダウンイベントを有効にしたい(ゲーム終了時に表示される再起動ボタン)。助けて。特定のボタンをクリックしてキーダウンイベントをアクティブにする方法はありますか?

//these are my keydown codes 
private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 


     int r = pictureBox5.Location.X; 
     int t = pictureBox5.Location.Y; 





     if (pictureBox5.Top >= 33) 
     { 
      if (e.KeyCode == Keys.Up) 
      { 
       t = t - 15; 


      } 
     } 


     if (pictureBox5.Bottom <= 490) 
     { 
      if (e.KeyCode == Keys.Down) 
      { 
       t = t + 15; 
      } 
     } 


     if (pictureBox5.Right <= 520) 
     { 
      if (e.KeyCode == Keys.Right) 
      { 
       r = r + 15; 
      } 
     } 

     if (pictureBox5.Left >= 30) 
     { 

      if (e.KeyCode == Keys.Left) 
      { 
       r = r - 15; 
      } 

     } 


     if (e.KeyCode == Keys.Up && e.KeyCode == Keys.Right) 
     { 
      t = t - 15; 
      r = r + 15; 
     } 





     pictureBox5.Location = new Point(r, t); 
    } 

//and that's the button I wanted to interlace with keydown event 
private void button1_Click(object sender, EventArgs e) 
    { 
    } 
+0

ボタンを押したときに押すべきキーは何ですか? Form_Keydownのコードはe.KeyCodeの値に完全に依存するため、キーを使用しないと、そのコードをリファクタリングなしで使用することはできません – Steve

+0

ıすべての4つの主方向の方法が有効になります(右上の左下) – KAMATLI

+0

これはどのようにでも可能ですか?コードはすべて一緒に値にすることはできません。あなたのform_keydownコードには不可能なif文があります。 KeyCodeは、Keys.RightとKeys.Upの両方に等しいことはできません。 – Steve

答えて

0

ここでリファクタリングが役立ちます。あなたがボタンを押すと、使用するキーコードがKeys.Downであるとします。このシナリオでは、あなたは今、あなたはForm_KeyDownイベントから

private void Form_KeyDown(object sender, KeyEventArgs e) 
{ 
    // Pass whatever the user presses... 
    HandleKey(e.KeyCode); 
} 

を、このメソッドを呼び出すと、ボタンから

をクリックすることができますHandleKey

private void HandleKey(Keys code)  
{ 
    int r = pictureBox5.Location.X; 
    int t = pictureBox5.Location.Y; 
    if (pictureBox5.Top >= 33) 
    { 
     if (code == Keys.Up) 
      t = t - 15; 
    } 
    if (pictureBox5.Bottom <= 490) 
    { 
     if (code == Keys.Down) 
      t = t + 15; 
    } 
    if (pictureBox5.Right <= 520) 
    { 
     if (code == Keys.Right) 
      r = r + 15; 
    } 

    if (pictureBox5.Left >= 30) 
    { 
     if (code == Keys.Left) 
      r = r - 15; 
    } 

    // This is simply impossible 
    if (code == Keys.Up && code == Keys.Right) 
    { 
     t = t - 15; 
     r = r + 15; 
    } 
    pictureBox5.Location = new Point(r, t); 
} 

と呼ばれる別の方法にForm_KeyDown内のすべてのコードを移動することができます

private void button1_Click(object sender, EventArgs e) 
{ 
    // Pass your defined key for the button click 
    HandleKey(Keys.Down); 
} 
+0

完全に感謝している友人。ありがとうございます – KAMATLI

+0

助けになるのはうれしいです。サイトの比較的新しいユーザーとして、あなたが読んでおくことをお勧めします(まだ行っていない場合)[回答の受け入れはどのように機能しますか](http://meta.stackexchange.com/questions/5234/how-does-accepting -an-answer-work) – Steve

+0

今すぐ修正されました。これは、キー列挙からの値でなければなりません – Steve

関連する問題