我使用的是keydown事件检测按键,并有各种操作的几个组合键。
if (e.KeyCode == Keys.C && e.Modifiers == Keys.Control && e.Modifiers == Keys.Shift)
{
//Do work
}
else if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control)
{
//Paste
}
出于某种原因,组合键中,我按Ctrl + Shift + C 键不能正常工作。 我已经重新命令他们,并把它放在顶部认为它可能是从按Ctrl + C的干扰,甚至删除按Ctrl + C,看它是否是导致问题。 它仍然无法正常工作。 我知道这可能是一些非常简单的,但不能完全掌握它是什么。 我所有的1个修饰+ 1个组合键的做工精细,只要我添加第二个修改是当它不再起作用。
if (e.KeyCode == Keys.C && e.Modifiers == (Keys.Control | Keys.Shift))
{
//Do work
}
else if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control)
{
//Paste
}
你试过e.Modifiers == (Keys.Control | Keys.Shift)
如果你想允许Ctrl和Shift,然后用按位OR(如Keys
是一个Flags
枚举)
if (e.KeyCode == Keys.C && e.Modifiers == (Keys.Control | Keys.Shift))
{
//Do work (if Ctrl-Shift-C is pressed, but not if Alt is pressed as well)
}
else if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control)
{
//Paste (if Ctrl is only modifier pressed)
}
如果Alt键被按下,以及这将失败
另一种方法是添加一个不可见的菜单项,分配按Ctrl + Shift + C快捷键给它,并处理该事件出现。
if ((Keyboard.Modifiers & ModifierKeys.Shift | ModifierKeys.Control) > 0)
Debugger.Launch();
这是我做的按Ctrl + Z撤消和按Ctrl + Shift + Z恢复操作和它的工作。
Private Sub Form_Main_KeyDown(sender As Object, e As KeyEventArgs) Handles Me.KeyDown
Select Case e.KeyCode
Case Keys.Add
diagramView.ZoomIn()
Case Keys.Subtract
diagramView.ZoomOut()
Case Keys.Z
If e.Modifiers = Keys.Control + Keys.Shift Then
diagram.UndoManager.Redo()
ElseIf e.Modifiers = Keys.Control Then
diagram.UndoManager.Undo()
End If
End Select
End Sub
试试这个。 应该表现你想让它的方式,这是一个有点简单。
if (e.Control)
{
if (e.Shift && e.KeyCode == Keys.C)
{
//Do work
}
else if (e.KeyCode == Keys.V)
{
//Paste
}
}
眼见为没有人提到他们,我只是要离开的建议,使用KeyEventArgs.KeyData:
if (e.KeyData == (Keys.C | Keys.Control | Keys.Shift)
{
//do stuff
//potentially use e.Handled = true
}
if (e.KeyData == (Keys.V | Keys.Control)
{
//do other stuff
//potentially use e.Handled = true
}
这应该只作用于特定的组合键,虽然修饰符的顺序似乎并不重要,第一个是总是最后的按键。
而e.Handled =真应该停下来,但我不知道它背后的具体机制。