2011-08-17 7 views
0

내가 Shift+Enter을 누를 때와 Enter 내가 Enter을 누르면 다음 할주의 할 KeyDown 이벤트의 백엔드에 을 눌렀을 때 우리가 한 KeyEvents를 얻을 수있을 때 새로운 라인을 생성하는 텍스트 상자를하려고했다 어떤 것.여러 줄의 텍스트 상자

if (e.Key.Equals(Key.RightShift)) 
      { 
} 

이 다음 텍스트 상자에 추가됩니다 Enter 새로운 라인을 누르면에 내가 wrap-AcceptReturn = truetextwrapping을 클릭까지 단일 line.as 잘 동작하지만 event does not fire up.

내가 새로운 라인이 Shift+Enter

에서 일하려면

Enter 이벤트가 발생해야합니다. 아이디어가 있으십니까?

답변

0

는 바닐라 여러 줄의 텍스트 상자에서 작동해야의 KeyDown 이벤트에 다음과 같은 시도, 더 아무것도 필요가 없습니다 : 당신은 아마 PreviewKeyDown 이벤트를 처리 할 필요가 있다고 생각

private void textBox1_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (!e.Shift && e.KeyValue == (int)Keys.Enter) 
     { 
      e.SuppressKeyPress = true; 

      // Fire my custom event 
     } 
    } 
2

. 처리하려는 키 누르기 조합을 잡고 처리 한 다음 키 누르기 이벤트 tunnels & bubbles으로 처리되지 않도록 e.Handled = true을 설정하십시오.

XAML :

<TextBox TextWrapping="Wrap" AcceptsReturn="True" 
    PreviewKeyDown="TextBox_PreviewKeyDown" /> 

코드 숨김

private void TextBox_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyboardDevice.Modifiers == ModifierKeys.None && e.Key == Key.Enter) 
    { 
     e.Handled = true; 

     // Do your special enter handling here... 
    } 

    // Shift+Enter (and any other keys) will be handled as normally... 
    // ...you'll still get your new line on Shift+Enter 
} 

참고 : 당신은 여전히 ​​같은 새로운 라인 뿐만 아니라를 추가 할 수의 키를 입력 할 경우 특수 처리 후 e.Handled = true 행을 삭제하면됩니다.

+0

간단한 입력이 작동하지 않았습니다. 컨트롤 modifierkey.if를 입력해야했습니다. 단일 입력이 눌려졌습니다. 이벤트가 발생하지 않습니다. –

+0

@ 라그랑지안 - 당신이하려는 일에 대해 오해하지 않는 한. 어떤 이벤트가 시작되지 않습니까? PreviewKeyDown 핸들러에 들어갈 수 있습니까? 어쩌면 질문에 더 많은 코드를 게시 할 수 있습니다. – IanR

관련 문제