【问题标题】:detect Ctrl + Enter检测 Ctrl + Enter
【发布时间】:2012-04-24 06:28:26
【问题描述】:

(使用 WPF) 我尝试检测 Ctrl + Enter 何时被击中。 所以我尝试了这段代码:

if (e.Key == Key.Return && (e.Key == Key.LeftCtrl || e.Key == Key.RightCtrl))
 {
   //Do Something            
 }

显然这是不正确的,因为它不起作用。 谁能帮我解释一下正确的方法应该是什么?

感谢

【问题讨论】:

    标签: c# wpf keystroke


    【解决方案1】:

    显然e.Key 在同一事件中不能等于多个不同的值。

    您需要处理使用KeyEventArgs 的事件之一,在那里您会发现ControlModifiers 等属性将帮助您检测组合。

    使用KeyPressEventArgsKeyPress 事件只是没有足够的信息。


    Drat,你说 WPF 没有。看起来你需要e.KeyboardDevice.Modifiers

    【讨论】:

    • 谢谢! e.KeyboardDevice.Modifiers 我认为应该帮助我:)
    【解决方案2】:

    我认为您需要一个 SpecialKey 处理程序。 我google了一下,找到了解决方案here.

    以下链接中的代码可能会解决您的问题:

      void SpecialKeyHandler(object sender, KeyEventArgs e)
    {
        // Ctrl + N
        if ((Keyboard.Modifiers == ModifierKeys.Control) && (e.Key == Key.N))
        {
            MessageBox.Show("New");
        }
    
        // Ctrl + O
        if ((Keyboard.Modifiers == ModifierKeys.Control) && (e.Key == Key.O))
        {
            MessageBox.Show("Open");
        }
    
        // Ctrl + S
        if ((Keyboard.Modifiers == ModifierKeys.Control) && (e.Key == Key.S))
        {
            MessageBox.Show("Save");
        }
    
        // Ctrl + Alt + I
        if ((Keyboard.Modifiers == (ModifierKeys.Alt | ModifierKeys.Control)) && (e.Key == Key.I))
        {
            MessageBox.Show("Ctrl + Alt + I");
        }
    }
    

    【讨论】:

    • 很高兴,如果我能帮上忙的话。 :)
    • 如果有人想知道,实际答案就在这里。这应该标记为答案,第一个只是懒惰。
    • @Yusha:如果您认为一个既能解释问题的答案,那么您对 ​​SO 应该是什么(以及网站所有者和版主不分享的)有一个非常奇怪的概念并且一种解决方案比从另一个网站复制+粘贴代码的解决方案“更懒惰”。此外,您喜欢的答案是错误的,因为它异步检查 Control 键的状态,而我建议的属性与输入队列正确同步。您可能只会在负载下看到差异,但难以触发的错误是最糟糕的。
    • 你的情况会很好,但想一想,如果你想抓住有人在做 CTRL + V 怎么办。那是你的情况和这个答案都失败的时候。我不是想无礼,我只是说。
    【解决方案3】:
    if (e.Modifiers == Keys.Control && e.KeyCode == Keys.Enter)
    

    【讨论】:

      【解决方案4】:
         if (e.KeyChar == 10)
                  {
                   ///Code
                  }
      

      或者

       if ((Char)e.KeyChar == '\n')
                  {
                   ///Code
                  }
      

      【讨论】:

        猜你喜欢
        • 2011-11-13
        • 2022-01-14
        • 2010-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-11
        • 1970-01-01
        相关资源
        最近更新 更多