C#에서 여러 수정 자 키를 사용하는 방법
-
07-07-2019 - |
문제
키 다운 이벤트를 사용하여 키를 감지하고 다양한 작업에 대한 몇 가지 키 조합이 있습니다.
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 키 + 옮기다 + 씨 작동하지 않습니다. 나는 그것들을 다시 주문했고, 그것을 맨 위에 올려 놓았다. Ctrl 키 + 씨, 심지어 제거했습니다 Ctrl 키 + 씨 문제가 발생했는지 확인합니다. 여전히 작동하지 않습니다. 나는 그것이 아마도 매우 간단한 것임을 알고 있지만 그것이 무엇인지 이해할 수는 없습니다. 두 번째 수정자를 추가하자마자 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 키 그리고 옮기다 그런 다음 BitWise 또는 (AS Keys
a 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)
}
이것은 실패합니다 대체 도 눌렀습니다
또 다른 방법은 보이지 않는 메뉴 항목을 추가하는 것입니다. Ctrl 키 + 옮기다 + 씨 바로 가기를하고 그곳에서 이벤트를 처리하십시오.
if ((Keyboard.Modifiers & ModifierKeys.Shift | ModifierKeys.Control) > 0)
Debugger.Launch();
이것이 내가 한 일입니다 Ctrl 키+지 실행 취소 및 Ctrl 키+옮기다+지 재조정 운영 및 작동했습니다.
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 = true는 그 뒤에있는 특정 역학을 모르지만 그것을 멈춰야합니다.