문제

키 다운 이벤트를 사용하여 키를 감지하고 다양한 작업에 대한 몇 가지 키 조합이 있습니다.

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는 그 뒤에있는 특정 역학을 모르지만 그것을 멈춰야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top