2013-02-24 2 views
1

간단한 로그인 양식이 있고 그 버튼의 속성을 "OK"버튼 에 동의하고 일부 처리를 위해 KeyDown 이벤트를 설정 한 "사용자 이름"이라는 텍스트 상자가 있습니다. Ok가 enabled를 false로 설정했습니다.keyDown 이벤트가 텍스트 상자에서 작동하지 않습니다

btnOk.Enbled = false; 
this.AcceptButton = btnOk; 
txtUsername.KeyDown += new KeyEventHandler(KeyDownHandle); 

사용자 이름 텍스트 상자에 입력을 입력하면 일부 처리를 수행 한 다음 동의 버튼을 사용하도록 설정했습니다.

private void KeyDownHandle(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     // some processing 
     btnOk.Enabled = true; 
     txtPassword.Focus(); 
    } 
} 

비밀번호 글 상자에 비밀번호를 쓰고 Enter 키를 누르면 "OK.Click"이 트리거됩니다.

하지만 "accept button"때문에 keyDown이 작동하지 않는 것이 문제입니다.
이 문제를 해결하려면 어떻게해야합니까?

편집 : acceptButton을 "none"으로 설정하면 문제가 해결되었다고 말하고 싶지만 그게 내가 찾고있는 것이 아닙니다.

답변

4

이유는 사용자 이름이 삽입 된 후에는 활성화 된 후에 만 ​​키를 입력 받아, 그런 식으로 btnOk을 당신은 constrctor (내 생각)에서 this.AcceptButton = btnOk를 제거하고는 KeyDownHandler에 넣지 마십시오. 코드는 다음과 같아야합니다.

btnOk.Enabled = false; 
txtUsername.KeyDown += new KeyEventHandler(textBox1_KeyDown); 
btnOk.Click += new EventHandler(button1_Click); 


private void KeyDownHandle(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     // some processing 
     btnOk.Enabled = true; 
     this.AcceptButton = btnOk; 
     txtPassword.Focus(); 
    } 
} 
관련 문제