2009-05-01 5 views

답변

91

어떤 KeyDown 처리기를 사용 했습니까? 아래 코드는 나를 위해 작동합니다. Alt 키 + ,하지만 당신은 요구하지 않았다 : 나에게 문제를 제공 한은 D 당신은 KeyUp 이벤트,하지 KeyDown를 사용할 필요가

public Window1() 
{ 
    InitializeComponent(); 
    AddHandler(Keyboard.KeyDownEvent, (KeyEventHandler)HandleKeyDownEvent); 
} 

private void HandleKeyDownEvent(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Tab && (Keyboard.Modifiers & (ModifierKeys.Control | ModifierKeys.Shift)) == (ModifierKeys.Control | ModifierKeys.Shift)) 
    { 
     MessageBox.Show("CTRL + SHIFT + TAB trapped"); 
    } 

    if (e.Key == Key.Tab && (Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control) 
    { 
     MessageBox.Show("CTRL + TAB trapped"); 
    } 
} 
+0

SIZ, 덕분에 추가 할 수 있습니다 차지합니다. 우리는 또한 XBAP를 가지고 있으며 XBAP에서 작동하지 않습니다. XBAP와 함께이 작업을 수행하는 방법에 대한 아이디어가 있습니까? – FarrEver

+1

그것을 할 xamly 방법이 있습니까? – Shimmy

+13

@siz 다음 문법을 사용하여 If 문을 정리할 수 있습니다 :'Keyboard.Modifiers.HasFlag (ModifierKeys.Control)' – Pakman

8

...

+2

흥미 롭습니다. 이것을 시도하지 않았지만 이유를 설명해 주시겠습니까? –

+7

Sure Siz. 동시에 2 개 이상의 키 스트로크를 캡처하려고하면 한 번에 하나의 키를 캡처하기 때문에 e.Key에 대한 KeyDown 검사를 사용할 수 없습니다. KeyDown이 필요한 경우, 예를 들어 사용자가 키 조합을 누른 상태에서 작업을 수행하는 것과 같이 KeyDown과 Keyboard 클래스, 특히 IsKeyDown()을 사용하여 특정 키를 테스트해야합니다. –

+1

죄송합니다, 여기서 뭐라고 말하려고하는지 이해하지 못합니다. KeyUp 이벤트는 e.Key의 단일 키 값만 전달합니다. KeyDown 대신 KeyUp을 처리하면 "동시에 두 번 이상의 키 입력을 캡처"하는 것이 더 좋은 특정 예제를 제공 할 수 있습니까? 감사. –

30

구스타보의 대답은 제가 찾고있는 것이 었습니다. 인 Szymon Rozga 대답의 버전을 (근무

private void OnButtonKeyDown(object sender, KeyEventArgs e) 
    { 
     if(Keyboard.IsKeyDown(Key.LeftCtrl) && Keyboard.IsKeyDown(Key.Tab) && Keyboard.IsKeyDown(Key.LeftShift)) 
     { 
      // 
      // TODO: somthing here 
      // 
     } 
    } 
+0

슬프게도 사용자가 올바른 ctrl 버튼을 사용할 때 슬픈 듯이 처리하지 않습니다 :-) –

1

안녕 당신이를 keyDown 이벤트에 이것을 사용할 수 있습니다 : 우리는 붙여 넣기를 허용 여전히 입력 키의 유효성을 검사하지만, 할). 우리의 WPF에 대한 작업을 수행하는 ... 우리는 Alt 키에 보이지 않는, 그러나 단순히 처음 경우

public View() 
    { 
    InitializeComponent(); 
    AddHandler(Keyboard.PreviewKeyDownEvent, (KeyEventHandler)controlKeyDownEvent); 
    } 

    private void controlKeyDownEvent(object sender, KeyEventArgs e) 
    { 
    if (e.Key == Key.Tab && Keyboard.Modifiers.HasFlag(ModifierKeys.Control)) 
    { 
     if (Keyboard.Modifiers.HasFlag(ModifierKeys.Shift)) 
      MessageBox.Show("CTRL + SHIFT + TAB trapped"); 
     else 
      MessageBox.Show("CTRL + TAB trapped"); 
    } 
    } 
+0

여기에서 문제는 if (Keyboard.IsKeyDown (Key.LeftCtrl)) && Keyboard.IsKeyDown (Key.Tab)). Ctrl + Shift + Tab – Devid

+0

을 누르면이 두 문장이 모두 실행됩니다.이 경우 cancel = true를 설정할 수 있습니다. 두 명령문 모두에서 Ctrl + Shift + Tab을 누를 때 – luka

1

죄송합니다, 제가 말씀 드릴 수 없습니다

protected override void OnPreviewKeyDown(KeyEventArgs e) 
{ 
    if ((e.Key == Key.V || e.Key == Key.X || e.Key == Key.C) && Keyboard.IsKeyDown(Key.LeftCtrl)) 
     return; 
}