2012-10-27 111 views
0

我正在嘗試將表單向左或向右移動,表示由主鍵擊由多個像素表示的輔助鍵擊,但目前爲止我還沒有做到任何東西。據我所知,我應該在這裏沒有問題。我也將KeyPreview設置爲true。使用Form1_KeyDown捕獲鍵擊(...)

private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e) 
    { 
     this.Close(); 
     int movement = 0; 
     if (e.KeyCode == Keys.R) 
      lastEntered = 'r'; 
     else if (e.KeyCode == Keys.L) 
      lastEntered = 'l'; 
     else 
     { 
      if (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9) 
      { 
       movement = (int)(e.KeyCode - Keys.NumPad0); 
       Console.WriteLine(movement); 
       this.Left += movement; 
      } 
      if (lastEntered == 'r') 
       this.Left += movement; 
      else if (lastEntered == 'l') 
       this.Left -= movement; 
     } 
    } 
+1

你的代碼有一些錯誤。你爲什麼首先在任何一個關鍵時刻立即關閉你的表格?您如何期待表格在已經關閉時移動? – nawfal

+0

被添加到查看是否有任何按鍵事件發生。這個想法是,我可以清楚地看到表單是否已經關閉,因爲它代表我的代碼什麼都不做,我希望至少有一些事情發生。 – Roadblock

+0

在這種情況下,您最好使用一個消息框,因爲Close在所有情況下都可能不起作用。 – nawfal

回答

1

有幾件事情你應該改變。首先從keydown事件中取下this.Close。代碼將清除其餘部分。

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.R) 
     lastEntered = 'r'; //move to an enum preferably 
    else if (e.KeyCode == Keys.L) 
     lastEntered = 'l'; //move to an enum preferably 
    else 
    { 
     if (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9) 
     { 
      int movement = (int)(e.KeyCode - Keys.NumPad0); 

      if (lastEntered == 'r') 
       this.Left += movement; 
      else if (lastEntered == 'l') 
       this.Left -= movement; 
     } 
    } 
} 

這是我認爲最後按下R或L時,應一直記得和任何其他鍵按下不覆蓋lastEntered關鍵我相信這是不是你要尋找到。修改你的代碼是這樣的:

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.R) 
     lastEntered = 'r'; //move to an enum preferably 
    else if (e.KeyCode == Keys.L) 
     lastEntered = 'l'; //move to an enum preferably 
    else 
    { 
     lastEntered = 'u'; //u for unwanted - only if even num keys should overwrite 
     if (e.KeyCode >= Keys.NumPad0 && e.KeyCode <= Keys.NumPad9) 
     { 
      int movement = (int)(e.KeyCode - Keys.NumPad0); 

      if (lastEntered == 'r') 
       this.Left += movement; 
      else if (lastEntered == 'l') 
       this.Left -= movement; 
     } 
     //else     //so that num keys dont overwrite and hence you 
     // lastEntered = 'u'; //could keep pressing num keys to move the form 
    } 
} 
+0

因此,經過一些工作和大量宣誓之後,我發現我的問題,我需要爲InitializeComponenent()方法添加: 'KeyDown + = Form1_KeyDown(...)' 。 – Roadblock

+0

@Roadblock確實。這就是你應該如何註冊每一個事件。它更容易,如果你可以從設計師的財產部分,視覺工作室會自動爲你做到這一點。 – nawfal