在C#中选择RichTextbox中的文本会删除文本

时间:2009-05-21 11:01:23

标签: c# richtextbox

我在从Richtextbox

派生的控件中输入了以下文本

“世界是{beautful}”。

我的主要目的是为beautful这个词创建一个链接。我可以使用CFE_LINK创建此内容,但是当我选择文本时就是这样。

当我使用Select(4,9)时,4到9范围内的文字会被删除。

有人可以帮我解决我错过的问题吗?

代码:

我正在创建一个从Richtextbox派生的用户控件。

我在下面给出了确切的代码;我没有做任何颜色变化。我认为Select命令默认将所选文本设置为蓝色。

protected override void OnKeyPress(KeyPressEventArgs e)
{
   String keypressed =  e.KeyChar.ToString();
   if(keypressed == "}")
      Select(4,9)        
   base.OnKeyPress(e);
}

4 个答案:

答案 0 :(得分:2)

我怀疑当按下'}'键时,代码会在字符发送到文本框之前运行。

因此,您选择文本,然后将'}'字符发送到文本框,覆盖选择。

编辑:是的,转载它。

我不确定如何解决它。也许最好实现OnTextChanged ..你可以扫描整个文本框中的未链接{大括号内的单词}。如果文本很大,它可能会更慢,但它会自动处理复制和粘贴等事情。

答案 1 :(得分:2)

起初我开始搞乱这个时,我也很困惑。但是它击中了我,很可能你正在按下的键被发送到文本框以在KeyUp渲染。果然,当我将代码更改为此时,它可以工作:

    protected override void OnKeyUp(KeyEventArgs e)
    {
        base.OnKeyUp(e);
        if (e.KeyCode == Keys.Oem6)
        {
           Select(4, 9);
        }

    }

答案 2 :(得分:0)

我投票支持BFree的答案,但如果由于某种原因你必须使用OnKeyPress方法,你可以调用select方法,所以它会在事件完成后发生。

    protected delegate void SelectAfterKeyPress(int start, int length);

    protected override void OnKeyPress(KeyPressEventArgs e)
    {
        base.OnKeyPress(e);
        String keypressed = e.KeyChar.ToString();
        if (keypressed == "}")
        {
            this.BeginInvoke(new SelectAfterKeyPress(Select), new object[] { 4, 9 });
        }
    }

答案 3 :(得分:0)

根据Blorgbeard的回答,您首先选择文字,然后在文本框中输入“}”,替换您的选择。也许您想要的是首先输入“}”然后然后进行选择。

protected override void OnKeyPress(KeyPressEventArgs e)
{
   // type "}" into textbox
   base.OnKeyPress(e);

   String keypressed =  e.KeyChar.ToString();

   if(keypressed == "}")
      Select(4,9)        
}
相关问题