2014-10-31 50 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