如何使用C#多个修饰键如何使用C#多个修饰键(How to use multiple modifie

2019-05-12 04:44发布

我使用的是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个组合键的做工精细,只要我添加第二个修改是当它不再起作用。

Answer 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
}


Answer 2:

你试过e.Modifiers == (Keys.Control | Keys.Shift)



Answer 3:

如果你想允许CtrlShift,然后用按位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键被按下,以及这将失败



Answer 4:

另一种方法是添加一个不可见的菜单项,分配按Ctrl + Shift + C快捷键给它,并处理该事件出现。



Answer 5:

      if ((Keyboard.Modifiers & ModifierKeys.Shift | ModifierKeys.Control) > 0)
          Debugger.Launch();


Answer 6:

这是我做的按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


Answer 7:

试试这个。 应该表现你想让它的方式,这是一个有点简单。

 if (e.Control)
 {
    if (e.Shift && e.KeyCode == Keys.C)
    {
       //Do work
    }
    else if (e.KeyCode == Keys.V)
    {
       //Paste
    }
 }


Answer 8:

眼见为没有人提到他们,我只是要离开的建议,使用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 =真应该停下来,但我不知道它背后的具体机制。



文章来源: How to use multiple modifier keys in C#