我正在使用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个键组合都可以正常工作,只要我添加第二个修饰符就是它不再有效。
答案 0 :(得分:41)
if (e.KeyCode == Keys.C && e.Modifiers == (Keys.Control | Keys.Shift))
{
//Do work
}
else if (e.KeyCode == Keys.V && e.Modifiers == Keys.Control)
{
//Paste
}
答案 1 :(得分:7)
您是否尝试过e.Modifiers == (Keys.Control | Keys.Shift)
?
答案 2 :(得分:6)
如果要允许 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
,则会失败答案 3 :(得分:2)
另一种方法是添加一个不可见的菜单项,为它指定 Ctrl + Shift + C 快捷方式,并处理事件那里。
答案 4 :(得分:2)
if ((Keyboard.Modifiers & ModifierKeys.Shift | ModifierKeys.Control) > 0)
Debugger.Launch();
答案 5 :(得分:1)
这是我为 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
答案 6 :(得分:0)
试试这个。应该按照你想要的方式行事,而且有点简单。
if (e.Control)
{
if (e.Shift && e.KeyCode == Keys.C)
{
//Do work
}
else if (e.KeyCode == Keys.V)
{
//Paste
}
}
答案 7 :(得分:0)
看到没有人提到他们,我只是要留下使用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 = true应该阻止它,虽然我不知道它背后的具体机制。