2014-11-01 64 views
-1

所以我有一個HCI課程的作業,我可以把所有東西都看成是一部分。下面是實際問題:C# - 在事件發生後獲取鍵盤輸入

在你的主窗體上放置一個面板並更改其顏色。當用戶輸入「r」然後輸入數字n時,將面板向右移動n個像素。如果用戶輸入「l」,然後輸入一個 數字n,則將面板n像素向左移動。

我在掙扎的是在第一次按鍵之後捕獲整數。即在「r」被按下之後,我怎麼可能得到接下來的輸入?這裏是我的事件處理程序到目前爲止:

 private void rightLeftForm_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode.ToString() == "R") 
     { 
      //Move panel to the right 

     } 

     else if (e.KeyCode.ToString() == "L") 
     { 
      //Move panel to the left 
     } 
    } 

感謝您的幫助!

+0

在這個代碼你在哪裏了'char.IsDigit或者char.IsNumber'檢查?有幾種方法可以做到這一點,你可以做一個for循環,並檢查每個char.If你不想做一個循環嘗試這樣的內部if語句if(Char.IsNumber(e.KeyChar){那麼你知道這是一個輸入的數字}' – MethodMan 2014-11-01 18:39:32

回答

1

您可以嘗試記住用戶按下了哪個鍵「L」或「R」並存儲此信息。下次您的密鑰處理程序使用數字鍵進行調用時,您可以根據所存儲的狀態採取行動。

例子:

// enum to store panel movement direction 
public enum PanelMovement 
{ 
    None; 
    Left; 
    Right; 
} 

// member variable to store last panel movement 
private PanelMovement mCurrentMovement = PanelMovement.None; 

private void rightLeftForm_KeyDown(object sender, KeyEventArgs e) 
{ 
     if (e.KeyCode.ToString() == "R") 
     { 
      // store direction after player has pressed "R" 
      mPanelMovement = PanelMovement.Right; 
     } 
     else if (e.KeyCode.ToString() == "L") 
     { 
      // store direction after player pressed "L" 
      mPanelMovement = PanelMovement.Left; 
     } 
     // react on number key pressed 
     else if(e.KeyCode >= Keys.D1 && e.KeyCode <= Keys.D9) 
     { 
      if(mPanelMovement == PanelMovement.Left) 
       // move panel left 
      else if(mPanelMovement == PanelMovement.Right) 
       // move panel right 
     } 
    } 
+0

這應該工作,謝謝! – TeneCursum 2014-11-01 22:27:26