【发布时间】:2012-04-24 06:28:26
【问题描述】:
(使用 WPF) 我尝试检测 Ctrl + Enter 何时被击中。 所以我尝试了这段代码:
if (e.Key == Key.Return && (e.Key == Key.LeftCtrl || e.Key == Key.RightCtrl))
{
//Do Something
}
显然这是不正确的,因为它不起作用。 谁能帮我解释一下正确的方法应该是什么?
感谢
【问题讨论】:
(使用 WPF) 我尝试检测 Ctrl + Enter 何时被击中。 所以我尝试了这段代码:
if (e.Key == Key.Return && (e.Key == Key.LeftCtrl || e.Key == Key.RightCtrl))
{
//Do Something
}
显然这是不正确的,因为它不起作用。 谁能帮我解释一下正确的方法应该是什么?
感谢
【问题讨论】:
显然e.Key 在同一事件中不能等于多个不同的值。
您需要处理使用KeyEventArgs 的事件之一,在那里您会发现Control 和Modifiers 等属性将帮助您检测组合。
使用KeyPressEventArgs 的KeyPress 事件只是没有足够的信息。
Drat,你说 WPF 没有。看起来你需要e.KeyboardDevice.Modifiers。
【讨论】:
e.KeyboardDevice.Modifiers 我认为应该帮助我:)
我认为您需要一个 SpecialKey 处理程序。 我google了一下,找到了解决方案here.
以下链接中的代码可能会解决您的问题:
void SpecialKeyHandler(object sender, KeyEventArgs e)
{
// Ctrl + N
if ((Keyboard.Modifiers == ModifierKeys.Control) && (e.Key == Key.N))
{
MessageBox.Show("New");
}
// Ctrl + O
if ((Keyboard.Modifiers == ModifierKeys.Control) && (e.Key == Key.O))
{
MessageBox.Show("Open");
}
// Ctrl + S
if ((Keyboard.Modifiers == ModifierKeys.Control) && (e.Key == Key.S))
{
MessageBox.Show("Save");
}
// Ctrl + Alt + I
if ((Keyboard.Modifiers == (ModifierKeys.Alt | ModifierKeys.Control)) && (e.Key == Key.I))
{
MessageBox.Show("Ctrl + Alt + I");
}
}
【讨论】:
if (e.Modifiers == Keys.Control && e.KeyCode == Keys.Enter)
【讨论】:
if (e.KeyChar == 10)
{
///Code
}
或者
if ((Char)e.KeyChar == '\n')
{
///Code
}
【讨论】: