Richtextbox删除所选文本

时间:2012-11-23 19:06:59

标签: c# winforms richtextbox keyevent

我有以下代码:

private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.KeyCode == Keys.N)
        {
            richTextBox1.Select(1, 3);
        }
    }

按N键时,所选文本将替换为“n”。我读了Selecting text in RichTexbox in C# deletes the text,但它没有效果。

我正在使用Windows窗体。

2 个答案:

答案 0 :(得分:1)

可能,你需要e.Handled = true;在此停止事件。

http://msdn.microsoft.com/en-us/library/system.windows.forms.keyeventargs.handled.aspx

private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
{
        if (e.KeyCode == Keys.N)
        {
            richTextBox1.Select(1, 3);
            e.Handled = true;
        }
}

答案 1 :(得分:0)

亲自尝试:
打开编辑器,键入一些文本,标记部分文本并按N。怎么了?标记的文本将替换为n 您的RichTextBox也会发生同样的事情。这里要理解的重要一点是,对于您设置的事件,您只需添加一些功能并保持默认事件处理(由操作系统处理)完整。

所以使用你的代码,按键就可以了

richTextBox1.Select(1, 3);

选择一些字符,然后默认事件处理开始。因此,有一些标记的文本被N替换。
因此,您只需将事件标记为由您自己处理。不使用Handled - 属性,但使用SuppressKeyPress - 属性。

private void richTextBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.N)
    {
        richTextBox1.Select(1, 3);
        e.SuppressKeyPress = true;
    }
}

documentation of Handled明确指出:

If you set Handled to true on a TextBox, that control will
not pass the key press events to the underlying Win32 text
box control, but it will still display the characters that the user typed.

这是official documentation of SuppressKeyPress