C#Cursor / Caret在Richtextbox中附加文本时不显示

时间:2014-10-10 05:52:09

标签: c# treeview richtextbox

我是编程的新手,我正在制作C#Windows Form Application,在选择Tree节点时,它将文本附加在Richtextbox中:

Qs1:对我来说,选择树节点后不显示Caret。 Qs2:使编辑器显示,如果以//(注释)开头的单词应为绿色。

由于

 if (treeView1.SelectedNode.Name == "Node1")
        {  
          this.richTextBox1.SelectedText += "  my text for Node1" + Environment.NewLine
          richTextBox1.Focus();
        }
        else if (treeView1.SelectedNode.Name == "Node2")
        {
         this.richTextBox1.SelectedText += "  my text for Node2" + Environment.NewLine
          richTextBox1.Focus();
        }

1 个答案:

答案 0 :(得分:1)

您提出了两个与RichTextBox相关的问题。 StackOverflow上的首选形式是one question per question。您可能会通过更集中的问题获得更多回复。

话虽如此:

  1. 根据Select方法的文档:

      

    文本框必须具有焦点才能移动插入符号。

    所以你需要先做。

    此外,作为一般规则,您不应该使用+=修改预先存在的TextSelectedText,因为这样可以清除该文本上的所有RTF格式。相反,要插入文本,您应将选择设置为所需位置,长度为零,然后插入。因此:

    public static void FocusAndAppendToSelectedText(this RichTextBox richTextBox, string text)
    {
        Action append = () =>
        {
            richTextBox.Focus();
    
            var start = richTextBox.SelectionStart;
            var length = richTextBox.SelectionLength;
            var insertAt = start + length;
    
            richTextBox.Select(insertAt, 0);
            richTextBox.SelectedText = text;
        };
    
        if (richTextBox.InvokeRequired)
            richTextBox.BeginInvoke(append);
        else
            append();
    }
    

    此外,您应该使用\n而非Environment.Newline,因为the latter will get simplified into the former无论如何。

  2. 像" [如何]这样的问题让显示像编辑器一样,如果以//(注释)开头的单词应为绿色"非常一般。尝试将其分解为离散的问题,并为那些你无法弄清楚自己的问题提出问题。为了帮助您入门,请在此处查看此问题:highlight the '#' until line end in richtextbox。但是,您可能需要将SelectionBackColor设置为SelectionColor,具体取决于您的精确用户界面要求。