2009-07-02 5 views
0

텍스트 상자의 KeyPress 이벤트에서 메서드를 실행하지만 메서드가 실행되고 전에 키가 실제로 상자에 입력됩니다.키 입력 후 키 누르기 메서드

KeyUp을 사용하는 경우에는 표준 문자뿐만 아니라 소프트 키의 KeyUp 트리거를 제외하고 내가 원하는 동작을 얻습니다.이 기능은 특히 유용하지 않습니다.

키를 상자에 입력 한 후 KeyPress를 실행할 수 있습니까? 또는 KeyUp에서 소프트 키를 무시하도록 쉽게받을 수 있습니까?

답변

1

음, KeyPress 이벤트에서 keychar을 기억하고 기억 된 char을 사용하여 KeyUp에서 필요한 모든 로직을 수행 할 수 있습니다.

+0

KeyUp이 실행되면 텍스트 상자에 이미 누른 문자가 포함되어 있습니다. KeyPress에서 텍스트 상자 문자열과 keychar을 연결하여 코드가 올바른 값을 처리 할 수 ​​있다고 가정합니다. – ChristianLinnell

+1

글쎄,이 가능하다,하지만 당신이 생각보다 세게 : 커서가 텍스트의 중간에있을 수 있습니다 (당신은 숯불을 삽입해야합니다), 텍스트 상자 (숯불 선택 영역을 대체 할 수 있습니다), 당신은 올바르게 제어 문자 (탭, 백 스페이스 등). 어쩌면 질문을 업데이트하고 달성하고자하는 최종 결과를 알려줄 수 있습니까? – arbiter

0

키 누르기 이벤트에서 textbox.Texte.KeyChar을 연결하여 새 문자열을 처리 할 수 ​​있습니다.

private void textBox1_KeyPress(object sender, KeyPressEventArgs e) 
{  
    string newString = textBox1.Text + e.KeyChar.ToString(); 
    // Process newString 
    // If after processing you do not wish to undo the typed letter do 
    // e.Handled = true; 
} 
+2

흠, 그리고 키를 눌렀을 때 텍스트 상자 중간에 커서가 있으면 어떨까요? – arbiter

0

또한 textbox 컨트롤에서 TextChanged 이벤트를 시도 할 수 있습니다.

0

사용 keyUp 등 코드로로 : 다른 문자에

private void textBox1_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e) 
{ 
    //only do things when an alphabetical character is typed 
    if ((e.KeyCode >= Keys.a) && (e.KeyCode <= key.z) || 
     (e.KeyCode >= Keys.A) && (e.KeyCode <= key.Z)) 
    { 
     // do your thing 
    } 
} 

또한 당연히 확인할 수 있습니다 좋아.