2016-12-16 16 views
0
private void Form1_KeyDown(object sender, KeyEventArgs e) 
    { 
     switch (e.KeyCode) 
     { 
      case Keys.Up: 
       YUlt = YUlt - (PDiff + 10); 
       Draw.AddEllipse(XUlt, YUlt, 20, 20, Colour); 
       break; 
      case Keys.Down: 
       YUlt = YUlt + (PDiff + 10); 
       Draw.AddEllipse(XUlt, YUlt, 20, 20, Colour); 
       break; 
      case Keys.Left: 
       XUlt = XUlt - (PDiff + 10); 
       Draw.AddEllipse(XUlt, YUlt, 20, 20, Colour); 
       break; 
      case Keys.Right: 
       XUlt = XUlt + (PDiff + 10); 
       Draw.AddEllipse(XUlt, YUlt, 20, 20, Colour); 
       break; 

     } 

これで、キーボードで円を描画するwinformアプリケーションを作成しようとしています。このプログラムはNAITによって作成されたGDIDrawerインターフェイスを使用しますが、この質問を知ることは重要ではありませんので、Draw.AddEllipseについて心配しないでください。同時に2つのキーを押したとき

上記のスイッチケースは、赤い点を描くのに完全に問題なく動作しますが、次のif文が機能するはずのことは、ユーザーがF1キーを押しながら矢印キーを押すと、その周りに白い枠線があります。

 if (Keys.F1 && (Keys.Down || Keys.Up || Keys.Left || Keys.Right)) 
     { 
      switch (e.KeyCode) 
      { 
       case Keys.Up: 
        YUlt = YUlt - (PDiff + 10); 
        Draw.AddEllipse(XUlt, YUlt, 20, 20, Colour, 2, Color.White); 
        break; 
       case Keys.Down: 
        YUlt = YUlt + (PDiff + 10); 
        Draw.AddEllipse(XUlt, YUlt, 20, 20, Colour, 2, Color.White); 
        break; 
       case Keys.Left: 
        XUlt = XUlt - (PDiff + 10); 
        Draw.AddEllipse(XUlt, YUlt, 20, 20, Colour, 2, Color.White); 
        break; 
       case Keys.Right: 
        XUlt = XUlt + (PDiff + 10); 
        Draw.AddEllipse(XUlt, YUlt, 20, 20, Colour, 2, Color.White); 
        break; 

      } 
     } 

私が知っておく必要があるのは、ユーザーが、彼らは、矢印キーを押したときのドットに境界を与えるためにF1キーを押したままにすることができていること、それを作成する方法ですが、F1が押された場合は、プログラムはまだかかわらず、点を打つ

+0

待機します。 ...私は矢印を押すと、私はf1を押して、ドットを描くときに点を描画したいですか? f1が押されていない場合は点を描画しますか?なぜf1を使用してもf1のポイントは何ですか?私はそれを得ることはありません –

+0

F1を押してもプログラムは点を描画します。F1を押したままにすると境界線が点の周りにくるでしょう – user7115764

答えて

1

フォームフィールドを追加します。

bool F1Pressed; 

KeyUpイベントハンドラに登録:

private void Form1_KeyUp(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.F1) 
     F1Pressed = false; 
} 

お客様のKeyDownメソッドは次のようになります。

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    switch (e.KeyCode) 
    { 
     case Keys.F1: 
      F1Pressed = true; 
      break; 
     case Keys.Left: 
      if (F1Pressed) 
      { 
       // draw dot with border 
      } 
      else 
      { 
       // draw dot without border 
      } 
      break; 
     case Keys.Right: 
      if (F1Pressed) 
      // and so on 
    } 
} 
+0

ありがとう!それは完全に動作します – user7115764

関連する問題