【问题标题】: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 创建自己的游戏。用户可以通过键盘演奏。我不希望用户可以同时按住多个键。一次只有一个键。

标签: c# winforms


【解决方案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;
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多