【问题标题】:How to Press 3 Keys at a Time using KeyPress?如何使用 KeyPress 一次按 3 个键?
【发布时间】:2014-08-25 08:11:22
【问题描述】:

KeyPress 是否可以同时获得 3 个密钥? 我想得到 Ctrl + H + T 。 . .

我试过ff:

if (e.KeyCode == Keys.H && e.Modifiers == Keys.Control)
{
    if (e.KeyCode == Keys.T && e.Modifiers == Keys.Control)
    {
        Console.WriteLine("^");
    }
}

但是好像不行。我猜 e.KeyCode 一次只返回一个键?所以我仍在考虑如何做到这一点......或者可能将以前的密钥存储到变量中?提前致谢

【问题讨论】:

标签: c# winforms keypress


【解决方案1】:

试试这个

Keys key1 = Keys.None;
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (key1 == Keys.H && e.Modifiers == Keys.Control && e.KeyCode != Keys.ControlKey)
    {
        MessageBox.Show("Key Pressed");
        key1 = Keys.None;
    }
    else if (e.Control && key1 == Keys.None && e.KeyCode != Keys.ControlKey)
        key1 = e.KeyCode;
    else if (e.Control)
        key1 = Keys.None;
}

【讨论】:

  • 我只是注意到每次按 ctrl + H + anykey 并且它起作用了...如何指定第二个键是否为 T?
  • 您可以在第一个 if 条件中添加另一个条件 if (e.KeyCode == Keys.T)
  • +1 因为它有效,但我看到@GrantWinney 最简单的答案仍然非常感谢队友。
  • 如果用户按下 Ctrl+H,释放 H,然后按下 T,这将失败。当实际上 H 已被释放时,它将报告所有三个键。
  • @JimMischel 如果您有任何解决方案,请发布。保证我会投票。
【解决方案2】:

使用下面的代码:

 if (e.KeyCode == Keys.X && e.Control && e.Shift) {
        // CTRL+SHIFT+X was pressed!
    }

【讨论】:

  • 您应该在发布答案之前仔细阅读问题,否则您可能会被否决。 OP 想要使用单个修饰符来实现多个键,就像 Visual Studio Code Beautifier Ctrl + K + D
【解决方案3】:

这应该可以工作(我对其进行了测试,它似乎可以满足您的需求)。

如果你按下 Ctrl+H,它会设置一个布尔变量。然后,如果您随后立即按 Ctrl+T,它将检测到两个都被连续按下。如果你按下 Ctrl+T 以外的任何东西,它会将标志设置回 False。

private bool isCtrlHPressed;

private void txt_callerName_KeyDown(object sender, KeyEventArgs e)
{
    if (isCtrlHPressed && e.KeyCode == Keys.T && e.Modifiers == Keys.Control)
        Console.WriteLine("^");

    isCtrlHPressed = (e.KeyCode == Keys.H && e.Modifiers == Keys.Control);
}

【讨论】:

  • 我不接受这个,因为我发现这是最简单的答案。谢谢@GrantWinney
  • 如果按 Ctrl+H,然后松开 H,然后按 T,会怎样?我认为您需要一个KeyUp 事件处理程序来处理这种情况。即便如此,它也可能被愚弄。
【解决方案4】:

试试这个

if (e.Control && e.KeyCode == Keys.H && e.KeyCode == Keys.T)
{
    Console.WriteLine("^");
}

或者也试试这个

if (e.Modifiers == Keys.Control && e.KeyCode == Keys.H && e.KeyCode == Keys.T) 
{
    Console.WriteLine("^");
}

【讨论】:

  • 太棒了..!!你能告诉我如何将两个键存储在一个 Keys 类型对象中吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-18
  • 1970-01-01
  • 1970-01-01
  • 2010-09-23
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多