2014-10-31 2 views
0

나는이 머리카락을 통해 머리카락을 꺼냅니다. 아주 간단한 창문 양식 프로그램. 나는 richtextbox가 있고 나는 backspace가 richtextbox에서 무엇이든하는 것을 막고 싶다. 내가 e.handled에 중단 점을 넣어 나는 그것이 참으로 나누기 백 스페이스를 입력하면 여기에 내 코드C# .net을 사용하여 리치 텍스트 상자에서 백 스페이스를 방지합니다.

private void richTextBox1_KeyPress(object sender, KeyPressEventArgs e) 
{ 
    if (e.KeyChar == (char)Keys.Back) 
    { 
      e.handled = true; 
    } 
} 

입니다. 그러나 백 스페이스는 여전히 그것을 richtextbox로 만듭니다. 그래서 PreviewKeyDown이 사용되었지만 예제가 작동하지 않는 예제를 보았습니다! 시도했습니다

void richTextBox1.PreviewKeyDown(object sender, KeyPressEventArgs e) 
{ 
    e.Handled = true; 
} 

그러나 KeyPressEventArgs가 유효하지 않습니다! Forms에서 제공하는 기능을 사용하면 PreviewKeyDownEventArgs이고 사용 가능한 e.Handles가 없습니다. 그렇다면 어떻게해야할까요?

감사합니다.

답변

2

백스 페이스 키를 취소하려면 KeyDown 이벤트를 사용하십시오.

일부 컨트롤에서 KeyDown에서 특정 키 입력을 처리합니다 :

private void richTextBox1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Back) 
    { 
      e.Handled = true; 
    } 
} 

KeyPress 이벤트에 대한 MSDN 페이지는 다음과 같은 의견을 가지고있다. 예를 들어, RichTextBox는 KeyPress가 호출되기 전에 Enter 키를 처리합니다. 이 경우 KeyPress 이벤트를 취소 할 수 없으며 대신 KeyDown에서 키 입력을 취소해야합니다.

+0

는 또한 처리하기 위해 더 좋을 수도'대신'/ 위의 KeyPress' Down' gunr2171이 KeyPress 이벤트에 대한 내 게시물을 편집 @ – gunr2171

+0

. (OP는 작동하지 않는다고 말했다) – dodald

1

이 시도 :

if (e.KeyChar == '\b') 
+1

'KeyChar'는'string'이 아니라'char'입니다. 당신을 위해 그것을 고정. – gunr2171

+0

@ gunr2171 죄송합니다. 너무 많은 파이썬을 수행했습니다. D – phantom

+0

이 특정 솔루션을 사용할 수 없습니다. KeyPress 이벤트가 발행되고 '\ b'값을 가지지 만 Handled를 true로 설정해도 효과가 없습니다 (백 스페이스는 여전히 처리됩니다). 나는 이것이 KeyDown에서 처리되는 키 중 하나라고 생각한다. – dodald

관련 문제