2014-10-31 49 views
0

我正在將我的頭髮拉過來。非常簡單的Windows窗體程序。我有一個richtextbox,我想阻止退格在richtextbox中做任何事情。 這裏是我的代碼使用C#防止在richtextbox中退格.net

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

如果我把一個斷點e.handled我鍵入它確實打破了退格。但是,退格仍然會將其添加到richtextbox。所以我看過使用PreviewKeyDown的例子,但是其中沒有一個可以使用!我試過

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

但是KeyPressEventArgs無效!如果我使用的是Forms的PreviewKeyDownEventArgs,並且沒有e.Handles可用。那麼如何做到這一點?

謝謝

回答

2

使用KeyDown事件取消退格鍵按下。

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

有關KeyPress事件的MSDN頁面有如下評論:

某些控件將處理上的KeyDown某些擊鍵。例如,RichTextBox在調用KeyPress之前處理Enter鍵。在這種情況下,您不能取消KeyPress事件,而必須取消KeyDown中的鍵擊。

+0

它也可能會更好地處理'KeyPress',而不是'向上/ Down' – gunr2171 2014-10-31 16:31:50

+0

@ gunr2171編輯我關於KeyPress事件後。 (OP說它沒有工作) – dodald 2014-10-31 16:36:23

1

試試這個:

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

'KeyChar'是一個'char',而不是'string'。修正了這個問題。 – gunr2171 2014-10-31 16:31:07

+0

@ gunr2171哎呀謝謝!一直在做太多的蟒蛇:D – phantom 2014-10-31 16:33:00

+0

我無法得到這個特定的解決方案的工作。 KeyPress事件發出後,它的值爲'\ b',但將Handled設置爲true不起作用(退格仍處理)。我懷疑這是在KeyDown上處理的關鍵之一。 – dodald 2014-10-31 16:57:21