2013-03-08 4 views
7

사용자가 windows formrichtextbox을 가지고 있지만 사용자가 텍스트를 입력 할 수 있지만 사용자가 키를 누른 상태에서 1 문자 만 가져올 수 있도록 설정해야합니다.키 누름마다 하나의 값만 허용합니다.

그들이 hold down A이면 A 만 입력되며 AAAAAAAAAAAAAAAAAAAAAAAAAAAAA이 아닌 것입니다.

키가 눌리는 순간부터 키가 위로 올라올 때까지 나는 그 값을 1 값으로 변환하기를 원합니다.

어떻게하면이 아이디어를 얻을 수 있습니까?

나는 KeyDownKeyUp을 사용할 필요가 있다고 생각하지만 과거는 확실하지 않습니다.

답변

1

당신은 TextBox를 서브 클래스 화해 OnKeyDownOnKeyUp 메소드를 오버라이드 (override) 할 수있다. KeyDown 뒤에 KeyUps이 없으면 KeyEventArgs.SuppresKeyPresstrue으로 설정하여 무시하십시오. SuppresKeyPress가 중요 참고,

public class MyTextBox:TextBox 
{ 
    bool down = false; 
    protected override void OnKeyDown(KeyEventArgs e) 
    { 
     if (!down) 
      base.OnKeyDown(e); 
     else 
      e.SuppressKeyPress = true; 
     down = true; 
    } 
    protected override void OnKeyUp(KeyEventArgs e) 
    { 
     base.OnKeyUp(e); 
     down = false; 
    } 
} 

은 또한이 같은 KeyUpKeyDown 이벤트 핸들러를 사용할 수 있습니다 : 코드를 확인

bool down = false; 
private void textBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
     if (down) 
      e.SuppressKeyPress = true; 
     down = true; 
} 

private void textBox1_KeyUp(object sender, KeyEventArgs e) 
{ 
     down = false; 
} 
+0

첫 번째 솔루션은 완벽하게 작동합니다! 감사. – user476683

+0

사실, 둘 다 잘 작동합니다! – user476683

7

당신은 바로 KeyDownKeyUp 이벤트에 관한 것입니다. 이런 식으로 할 수 있습니다.

bool keyDown = false; 
bool keyPress = false; 

private void richTextBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    e.Handled = keyDown; 
    keyDown = true; 
} 

private void richTextBox1_KeyUp(object sender, KeyEventArgs e) 
{ 
    keyDown = keyPress = false; 
} 

private void richTextBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    e.Handled = keyPress; 
    keyPress = true; 
} 
+1

이 큰 인, 삭제 및 백 스페이스 위해 일이지만, A, B, C 등의 키에는 작동하지 않습니까? – user476683

+0

@ user476683 조금 수정 했으므로 이제는 작동해야합니다.) – VladL

관련 문제