我有一个用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