使用 WPF KeyDown 事件了解多个键
Understanding multiple keys with WPF KeyDown event
我正在使用 WPF KeyDown
事件。你能解释一下为什么当我按下 Ctrl+F1 时这个条件成立吗?当我按下 F1 时,Ctrl 已经按下,所以 !Keyboard.IsKeyDown(Key.LeftCtrl)
应该是假的。
编辑:
在下面的代码中,如果您按 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- 的两个条件子句为真)。 MessageBox 阻塞线程。同时松开 Ctrl 键并单击消息。然后代码继续执行并且不再按下 Ctrl 键(第二个 if 子句的两个条件都为真)
- 如果切换 if 语句,则只有第一个 if 语句的第一个条件 (
e.Key == Key.F1
) 为真。执行到第二个 if 语句并且两个条件都为真。显示 MessageBox 并停止执行,直到 MessageBox 关闭。
不同之处在于:按下 F1 键是在调用处理程序之前计算的,但是检查 Keyboard.IsKeyDown(Key.LeftCtrl)
是在这一刻计算的,当代码被执行
我正在使用 WPF KeyDown
事件。你能解释一下为什么当我按下 Ctrl+F1 时这个条件成立吗?当我按下 F1 时,Ctrl 已经按下,所以 !Keyboard.IsKeyDown(Key.LeftCtrl)
应该是假的。
编辑:
在下面的代码中,如果您按 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- 的两个条件子句为真)。 MessageBox 阻塞线程。同时松开 Ctrl 键并单击消息。然后代码继续执行并且不再按下 Ctrl 键(第二个 if 子句的两个条件都为真)
- 如果切换 if 语句,则只有第一个 if 语句的第一个条件 (
e.Key == Key.F1
) 为真。执行到第二个 if 语句并且两个条件都为真。显示 MessageBox 并停止执行,直到 MessageBox 关闭。
不同之处在于:按下 F1 键是在调用处理程序之前计算的,但是检查 Keyboard.IsKeyDown(Key.LeftCtrl)
是在这一刻计算的,当代码被执行