Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中的RichTexbox中选择文本将删除该文本_C#_Richtextbox - Fatal编程技术网

C# 在C中的RichTexbox中选择文本将删除该文本

C# 在C中的RichTexbox中选择文本将删除该文本,c#,richtextbox,C#,Richtextbox,我在从Richtextbox派生的控件中键入了以下文本 世界是美丽的 我的主要目的是为“美丽”这个词创建一个链接。我可以使用CFE_链接创建这个,但那是我选择文本的时候 当我使用Select 4,9时,4到9范围内的文本将被删除 有人能帮我解决我遗漏的问题吗 代码: 我正在创建一个从Richtextbox派生的用户控件 我在下面给出确切的代码;我没有做任何颜色的改变。我认为Select命令默认情况下会将所选文本设置为蓝色 protected override void OnKeyPress(Ke

我在从Richtextbox派生的控件中键入了以下文本

世界是美丽的

我的主要目的是为“美丽”这个词创建一个链接。我可以使用CFE_链接创建这个,但那是我选择文本的时候

当我使用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);
}

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

因此,选择文本,然后将“}”字符发送到文本框,覆盖所选内容

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

   String keypressed =  e.KeyChar.ToString();

   if(keypressed == "}")
      Select(4,9)        
}
编辑:是的,复制了它


我不知道该如何解决这个问题。也许实现OnTextChanged会更好。。您可以扫描整个文本框以查找未链接的{大括号内的单词}。如果文本较大,则速度可能较慢,但它会自动处理复制和粘贴等操作。

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

因此,选择文本,然后将“}”字符发送到文本框,覆盖所选内容

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

   String keypressed =  e.KeyChar.ToString();

   if(keypressed == "}")
      Select(4,9)        
}
编辑:是的,复制了它


我不知道该如何解决这个问题。也许实现OnTextChanged会更好。。您可以扫描整个文本框以查找未链接的{大括号内的单词}。如果文本很大,速度可能会慢一些,但它会自动处理复制和粘贴之类的事情。

起初,当我开始处理这个问题时,我也感到困惑。但我突然想到,很有可能你按下的键被发送到文本框,在KeyUp上进行渲染。果然,当我将您的代码更改为此时,它起了作用:

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

    }

起初,当我开始处理这个问题时,我也感到困惑。但我突然想到,很有可能你按下的键被发送到文本框,在KeyUp上进行渲染。果然,当我将您的代码更改为此时,它起了作用:

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

    }

我投票支持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 });
        }
    }

我投票支持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 });
        }
    }
根据的答案,您首先选择文本,然后在文本框中键入},替换您的选择。也许您需要先键入},然后进行选择

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

   String keypressed =  e.KeyChar.ToString();

   if(keypressed == "}")
      Select(4,9)        
}
根据的答案,您首先选择文本,然后在文本框中键入},替换您的选择。也许您需要先键入},然后进行选择

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

   String keypressed =  e.KeyChar.ToString();

   if(keypressed == "}")
      Select(4,9)        
}

您使用的是WinForms还是WPF?这里的代码片段将非常有用。另外,请发布一些代码,以便我们能够准确地看到您的操作。无法复制;文本被选中,但请注意,除非rtf是活动控件,否则它可能不会显示高亮显示颜色是否与文本颜色相同?这将使文本看起来好像不存在,尽管它仍然存在。您使用的是WinForms还是WPF?这里的代码片段将非常有帮助。另外,请注意发布一些代码,以便我们可以确切地看到您的操作。无法复制;文本被选中,但请注意,除非rtf是活动控件,否则它可能不会显示高亮显示颜色是否与文本颜色相同?这会使文本看起来好像不存在,尽管它仍然存在。这看起来很好。事实上,我要感谢大家的意见。知道如何获取我键入的字符的索引吗。任何比从Charindex获取职位更好的选择;在本例中,我可以有许多{},需要为所有这些维护一个列表。这看起来不错。事实上,我要感谢大家的意见。知道如何获取我键入的字符的索引吗。任何比从Charindex获取职位更好的选择;在本例中,我可以有许多{},并且需要维护所有这些的列表。