2016-12-16 80 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。同時按住兩個鍵時

上面的開關盒可以很好地繪製紅點,但下面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的要點?我沒有得到它 – 2016-12-16 19:31:16

+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