【问题标题】:Multiple keys with WPF KeyDown event带有 WPF KeyDown 事件的多个键
【发布时间】:2015-09-05 15:54:20
【问题描述】:

我正在处理 WPF KeyDown 事件(来自 Windows.Input 的 KeyEventArgs)。我需要识别用户何时单独按下 F1 和 Ctrl+F1。

   private void Window_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key==Key.F1 && Keyboard.IsKeyDown(Key.LeftCtrl))
        {
            MessageBox.Show("ctrlF1");
        }
        if (e.Key == Key.F1 && !Keyboard.IsKeyDown(Key.LeftCtrl))
        {
            MessageBox.Show("F1");
        }
    }

我的问题是,当我按下 Ctrl+F1 时,普通的 F1 消息框也会触发。我尝试将 e.Handled 添加到 Ctrl+F1 大小写,但没有帮助。

【问题讨论】:

    标签: c# wpf keyboard keyboard-events keydown


    【解决方案1】:

    用途:

    else if.....
    

    在您的情况下,两个选项都被触发,因为您在两种情况下都按 F1 键。

    【讨论】:

      【解决方案2】:

      使用 if 和 else 否则所有条件都会被评估。

         private void Window_KeyDown(object sender, KeyEventArgs e)
         {
             if (e.Key==Key.F1 && Keyboard.IsKeyDown(Key.LeftCtrl))
             {
                 MessageBox.Show("ctrlF1");
             }
             else if (e.Key == Key.F1 && !Keyboard.IsKeyDown(Key.LeftCtrl))
             {
                 MessageBox.Show("F1");
             }
         }
      

      【讨论】:

      • 有效。但仍然无法理解为什么它会在我的情况下触发。当我按下 F1 时,Ctrl 被按下,所以 !Keyboard.IsKeyDown(Key.LeftCtrl) 应该是 false
      【解决方案3】:

      我想你在找Keyboard.Modifiers

      if ((Keyboard.Modifiers & ModifierKeys.Control) > 0)
      {
          button1.Background = Brushes.Red;
      }
      else
      {
          button1.Background = Brushes.Blue;
      }
      

      【讨论】:

        【解决方案4】:

        先检查 Key.F1,如果按下,再检查 Key.LeftCtrl:

        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.F1)
            {
                MessageBox.Show(Keyboard.IsKeyDown(Key.LeftCtrl) ? "Ctrl-F1" : "F1");
            }
        }
        

        【讨论】:

        • 但是如何将两个键一起传递?当我想在调试时按 alt+f1 时,我发现调试器会按 alt 本身,并且在 && 之后的下一个条件永远不会评估为真。
        猜你喜欢
        • 2015-09-05
        • 1970-01-01
        • 1970-01-01
        • 2022-09-27
        • 2010-12-11
        • 2013-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多