我正在使用 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");
}
}
最佳答案
区别如下:
- 在您显示的代码中,进入处理程序时,按下 F1 并按下 Ctrl (第一个 if 子句的两个条件都为 true)。 MessageBox 阻塞线程。同时释放 Ctrl 键并单击该消息。然后代码继续执行,Ctrl 键不再被按下(第二个 if 子句的两个条件都为 true)
- 如果切换 if 语句,则只有第一个 if 语句的第一个条件 (
e.Key == Key.F1
) 为 true。执行到第二个 if 语句,并且两个条件都为 true。显示 MessageBox,并停止执行,直至 MessageBox 关闭。
区别在于:按下 F1 键是在调用处理程序之前评估的,但检查 Keyboard.IsKeyDown(Key.LeftCtrl)
是在此时评估的,当该行代码执行时
关于c# - 使用 WPF KeyDown 事件了解多个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30942875/