我有一個用C#編寫的簡單控制檯應用程序。我希望能夠檢測箭頭按鍵,這樣我就可以讓用戶轉向。如何使用控制檯應用程序檢測keydown/keyup事件?控制檯應用程序的C#箭頭鍵輸入
我的所有Google搜索都導致了關於windows窗體的信息。我沒有一個GUI。這是一個控制檯應用程序(通過串行端口控制機器人)。
我寫來處理這些事件的功能,但我不知道如何註冊到實際收到的事件:
private void myKeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Left:
...
case Keys.Right:
...
case Keys.Up:
...
}
}
private void myKeyUp(object sender, KeyEventArgs e)
{
... pretty much the same as myKeyDown
}
這可能是一個非常基本的問題,但我是相當新的C# ,而我以前從未需要獲得這種輸入。
更新:許多人建議我使用System.Console.ReadKey(true).Key
。這不會幫助。我需要知道一個按鍵何時被按下,何時被釋放,同時支持多個按鍵。另外,ReadKey是一個阻塞調用 - 這意味着程序將停止並等待按鍵被按下。
更新:似乎唯一可行的方法是使用Windows窗體。這很煩人,因爲我無法在無頭系統上使用它。要求Form GUI接收鍵盤輸入是愚蠢的。
但無論如何,對於後人來說,這是我的解決方案。我創建了我的.sln一個新的Form項目:
private void Form1_Load(object sender, EventArgs e)
{
try
{
this.KeyDown += new KeyEventHandler(Form1_KeyDown);
this.KeyUp += new KeyEventHandler(Form1_KeyUp);
}
catch (Exception exc)
{
...
}
}
void Form1_KeyDown(object sender, KeyEventArgs e)
{
switch (e.KeyCode)
{
// handle up/down/left/right
case Keys.Up:
case Keys.Left:
case Keys.Right:
case Keys.Down:
default: return; // ignore other keys
}
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
// undo what was done by KeyDown
}
請注意,如果你按住一個鍵,會的KeyDown叫了無數次,和KeyUp只會被調用一次(當你釋放)。所以你需要正常處理重複的KeyDown調用。
你可以在不同的線程中調用ReadKey,看看我的紡線建議。儘管這不能解決keyup/keydown的問題。 – Rushyo 2010-12-05 18:51:34