用户一次只能按住一个键盘按钮
Posted
技术标签:
【中文标题】用户一次只能按住一个键盘按钮【英文标题】:User can press and hold only one keyboard button at a time 【发布时间】:2010-09-03 10:42:48 【问题描述】:我有一个标准的 WinForms 应用程序。我想实现这样的功能:
用户一次只能按住一个键盘按钮。如果他试图按下一个按钮,同时按下另一个按钮,那么它没有结果。
PS:这种行为只会传播到我想要的表单,而不是我的应用程序的所有表单。
C#,2.0 - 3.5,VS 2008
【问题讨论】:
您是否要过滤控制键? (Ctrl、Shift、Alt) @Hapkido,没有。我正在为 Windows 创建自己的游戏。用户可以通过键盘演奏。我不希望用户可以同时按住多个键。一次只有一个键。 【参考方案1】:我得到了和卡达吉类似的东西
private Keys CurrentKey = Keys.None;
private void Form1_KeyDown(object sender, KeyEventArgs e)
if (CurrentKey == Keys.None)
CurrentKey = e.KeyData;
// TODO: put your key trigger here
else
e.SuppressKeyPress = true;
private void Form1_KeyUp(object sender, KeyEventArgs e)
if (e.KeyData == CurrentKey)
// TODO: put you key end trigger here
CurrentKey = Keys.None;
else
e.SuppressKeyPress = true;
【讨论】:
CurrentKey = Keys.None 的添加很好。我不确定确切的语法是什么,而且今天早上太着急了,无法查找。【参考方案2】:我很快就解决了这个问题,因此您可能需要对其进行修改才能使其正常工作,但它应该可以帮助您入门。
将表单的 KeyPreview 设置为 true。放入 KeyDown 事件和 KeyUp 事件。
Keys MyKey;
bool KeyIsDown = false;
private void Form1_KeyDown(object sender, KeyEventArgs e)
if (KeyIsDown)
e.Handled = true;
else
MyKey = e.KeyData;
private void Form1_KeyUp(object sender, KeyEventArgs e)
if (KeyIsDown)
if (e.KeyData == MyKey)
KeyIsDown = false;
【讨论】:
以上是关于用户一次只能按住一个键盘按钮的主要内容,如果未能解决你的问题,请参考以下文章