2012-11-13 3 views
2

시작하려면 앞의 질문이 반복 될 수 있지만 그 대답은 모두 작동하지 않습니다.
예제의 많은 부분에 대해 나열된 올바른 절차를 얻지 못합니다.C# 스페이스 키 이벤트 처리

은 내가 TextBoxListBox 있습니다. 텍스트 상자에 전자 메일을 입력하고 Space 키를 누르면 목록 상자에 전자 메일을 추가 한 다음 텍스트 상자를 지워야합니다. 제목에서 알 수 있듯이

, 나는 스페이스 키를 바인딩 운이 없었 없습니다.

이 나는 ​​시도했다 :

private void txtEmailAddr_KeyDown(object sender, KeyEventArgs e) 
    { 
     KeyEventArgs ke = e; 
     if (ke != null && ke.Key == Key.Space) 
     { 
      ke.Handled = false; 
     } 

     if (ke.Key == Key.Space) 
     { 
       lstEmails.Items.Add(txtEmail.Text); 
     } 
    } 

그리고

private void txtEmailAddr_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.Key == Key.Space) 
     { 
       lstEmails.Items.Add(txtEmail.Text); 
     } 
    } 

하십시오 누군가의 도움이 있었다. 사용

+0

양식에 적절한 이벤트 처리기를 추가 했습니까? (이것은 디자이너를 통해 할 수 있습니다) – antonijn

+0

'KeyDown' 이벤트 같은가? 그것 이외에 - 나는 이것을 위해 사용 된 다른 것을 결코 알지 못했다. – TheGeekZn

+0

사이드 노트 : 나는 "이메일 주소"가 아니고 "이메일"을 의미하기를 바랍니다. 공백없는 전자 메일은 읽기 쉽지 않습니다. – Patric

답변

3

public class SelectableTextBlock : TextBox 
{ 
    public SelectableTextBlock() 
    { 
     AddHandler(KeyDownEvent, new RoutedEventHandler(HandleHandledKeyDown), true); 
    } 

    public void HandleHandledKeyDown(object sender, RoutedEventArgs e) 
    { 
     KeyEventArgs ke = e as KeyEventArgs; 
     if(ke != null && ke.Key == Key.Space) 
     { 
      ke.Handled = false; 
     } 
    } 
} 

나는 SpaceKey 이벤트 처리가 나던 그 사용자 정의 텍스트 상자를 추가 할 수 있어요.

0

lstEmails.Items.Add(txtEmail.Text);

당신이 그것을 호출지고 있는지 확인하기 위해 해당 줄에 중단 점을 설정 봤어 라인을 호출해야 두 가지 방법처럼 보이나요?

당신은 당신이 당신의 방법에 텍스트 상자의 KeyDown 이벤트를 바인딩 한 확실한가요? 이처럼

:

nameOfYourTextBox.KeyDown += new EventHandler(txtEmailAddr_KeyDown); 
6

대신 KeyDown 이벤트는 텍스트 상자의 PreviewKeyDown 이벤트 후크 -

<TextBox PreviewKeyDown="txtEmailAddr_KeyDown"/> 

을 MSDN 문서에서 - 예를 들면 TAB 등

일부의 키가 밀렸을 때, RETURN, ESC 및 화살표 키는 일반적으로 으로 입력 컨트롤 키로 간주되지 않으므로 일부 컨트롤에서는 무시됩니다. 예제의 경우 기본적으로 Button 컨트롤은 화살표 키를 무시합니다. 화살표 키를 누르면 일반적으로 포커스가 이전 또는 다음 컨트롤로 이동합니다. 화살표 키는 탐색 키로 간주되며 일반적으로이 키를 누르면 단추의 KeyDown 이벤트가 발생하지 않습니다. 그러나 단추의 화살표 키를 누르면 PreviewKeyDown 이벤트가 발생합니다. 화살표 키를 누를 때 버튼의 PreviewKeyDown 이벤트 을 처리하고 true로 IsInputKey 속성을 설정하여, 당신은 KeyDown 이벤트를 발생시킬 수 있습니다. 그러나 화살표 키를 처리하면 포커스가 더 이상 이전 또는 다음 컨트롤 으로 이동하지 않습니다.

+1

이것은 매우 유용한 정보입니다. 그것은 작동합니다. –

+1

+1 예전의 미리보기 이벤트 솔루션 인 Ahh! 답변 해주셔서 감사합니다! –