用户一次只能按住一个键盘按钮

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;
        
    

【讨论】:

以上是关于用户一次只能按住一个键盘按钮的主要内容,如果未能解决你的问题,请参考以下文章

Vue:如何在按住键盘修饰符时更改按钮的文本?

centos键盘坏了怎么用软键盘

请问ahk里面如何实现按住不放某键触发后续事件?

事件类型--键盘与文本事件

iOS为数字键盘增加完成按钮

安卓虚拟键盘怎么调出来