C# 具有WPF KeyDown事件的多个键
我正在使用WPF KeyDown事件(来自Windows.Input的KeyEventArgs)。我需要识别用户何时单独按下F1和Ctrl+F1C# 具有WPF KeyDown事件的多个键,c#,wpf,keyboard,keyboard-events,keydown,C#,Wpf,Keyboard,Keyboard Events,Keydown,我正在使用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(
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的案例中,但没有帮助。使用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键。我想您正在寻找
首先选中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");
}
}
作品但我还是不明白为什么在我的情况下它会开火。当我按F1键时,Ctrl键被按下,所以!Keyboard.IsKeyDown(Key.LeftCtrl)应该为false,但如何将这两个键传递到一起??当我想在调试时点击alt+f1时,我发现调试器点击alt本身,并且在&&&之后的下一个条件中,永远不会将evaluate设置为true。
if ((Keyboard.Modifiers & ModifierKeys.Control) > 0)
{
button1.Background = Brushes.Red;
}
else
{
button1.Background = Brushes.Blue;
}
private void Window_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.F1)
{
MessageBox.Show(Keyboard.IsKeyDown(Key.LeftCtrl) ? "Ctrl-F1" : "F1");
}
}