使用WPF KeyDown事件

时间:2015-06-19 16:23:03

标签: c# wpf keyboard-events

我正在使用WPF KeyDown事件。当我按 Ctrl + F1 时,能否解释为什么这种情况属实?当我按 F1 时, Ctrl 已被按下,因此!Keyboard.IsKeyDown(Key.LeftCtrl)应为false。

修改

在下面的代码中,如果按 Ctrl + F1 ,两个消息都会触发。但是如果你改变这两个if语句的顺序,只有" ctrlF1"消息会像它应该的那样触发。我想解释这种奇怪的行为。

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");
    }
}

1 个答案:

答案 0 :(得分:2)

区别如下:

  • 在您显示的代码中,当进入处理程序时,按下 F1 并按下 Ctrl (第一个if子句的两个条件都为真)。 MessageBox阻塞线程。同时释放 Ctrl 键并单击该消息。然后代码执行继续, Ctrl 键不再被按下(第二个if子句的条件都为真)
  • 如果切换if语句,则只有第一个if语句的第一个条件(journal)为真。执行到第二个if语句并且两个条件都为真。显示MessageBox并执行停止,直到MessageBox关闭。

不同之处在于:在调用处理程序之前评估 F1 键的按下,但是在执行代码行时,会立即评估检查e.Key == Key.F1