【问题标题】:Prevent backspace in richtextbox using C# .net [duplicate]使用C#.net防止richtextbox中的退格[重复]
【发布时间】:2014-12-28 00:57:57
【问题描述】:

我正在把头发拉到这个上面。非常简单的windows窗体程序。我有一个富文本框,我想防止退格键在富文本框中做任何事情。 这是我的代码

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。那么如何做到这一点呢?

谢谢

【问题讨论】:

    标签: c# winforms richtextbox keypreview


    【解决方案1】:

    使用 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 取消击键。

    【讨论】:

    • 处理KeyPress而不是Up/Down也可能更好
    • @gunr2171 编辑了我关于 KeyPress 事件的帖子。 (OP说它不起作用)
    【解决方案2】:

    试试这个:

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

    【讨论】:

    • KeyCharchar,而不是 string。为你解决了这个问题。
    • @gunr2171 非常感谢!做了太多的python:D
    • 我无法让这个特殊的解决方案发挥作用。发出 KeyPress 事件,它确实具有值 '\b',但将 Handled 设置为 true 无效(仍在处理退格键)。我怀疑这是在 KeyDown 上处理的键之一。
    • 好吧,我已经解决了。事实证明,您必须使用 KeyDown 然后检查 KeyChar ,如果退格键执行 e.Handled = true;然而,正如我没有提到的,我也想要其他情况下的实际角色。因此,您还必须执行 KeyPress,它总是在 KeyDown 之后触发并传递 keychar,即使您发出 e.handled 也是如此。
    • @Tom 太棒了!为了帮助来自 google 的未来访问者,您为什么不创建一个显示您使用的代码的答案并接受它作为答案?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 2018-06-19
    相关资源
    最近更新 更多