我是编程的新手,我正在制作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();
}
答案 0 :(得分:1)
您提出了两个与RichTextBox
相关的问题。 StackOverflow上的首选形式是one question per question。您可能会通过更集中的问题获得更多回复。
话虽如此:
根据Select
方法的文档:
文本框必须具有焦点才能移动插入符号。
所以你需要先做。
此外,作为一般规则,您不应该使用+=
修改预先存在的Text
或SelectedText
,因为这样可以清除该文本上的所有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无论如何。
像" [如何]这样的问题让显示像编辑器一样,如果以//(注释)开头的单词应为绿色"非常一般。尝试将其分解为离散的问题,并为那些你无法弄清楚自己的问题提出问题。为了帮助您入门,请在此处查看此问题:highlight the '#' until line end in richtextbox。但是,您可能需要将SelectionBackColor
设置为SelectionColor
,具体取决于您的精确用户界面要求。