在富文本框中具有特定颜色的特定索引处插入文本
本文关键字:颜色 索引 插入文本 文本 | 更新日期: 2023-09-27 17:55:23
我想在我的RichTextbox
中插入一个字符串,在特定的位置和特定的颜色。所以我尝试为 RichTextbox
类的方法AppendText()
添加一个扩展。
public static void AppendText(this RichTextBox Box, string Text, Color col, int SelectionStart)
{
Box.SelectionStart = SelectionStart;
Box.SelectionLength = 0;
Box.SelectionColor = col;
Box.SelectionBackColor = col;
Box.Text = Box.Text.Insert(SelectionStart, Text);
Box.SelectionColor = Box.ForeColor;
}
我尝试在一个名为 RichTextBoxExtension
的类中使用它。结果并不符合我的预期。字符串已插入,但未选择颜色。有没有更好的方法来执行此功能?
编辑:我认为告诉您为什么我需要此功能可能会很有趣。实际上,当用户写右括号时,我想突出显示(或着色)关联的左括号。因此,例如,如果用户写入(Mytext),则当用户点击")"时,第一个括号将是彩色的,并将选择保留在此括号上。
您必须使用 RichTextBox 控件的 SelectedText
属性。此外,请确保在更改任何内容之前跟踪当前所选内容的值。
你的代码应该看起来像这样(我给出了汉斯所暗示的内容):
public static void AppendText(this RichTextBox Box,
string Text,
Color col,
int SelectionStart)
{
// keep all values that will change
var oldStart = Box.SelectionStart;
var oldLen = Box.SelectionLength;
//
Box.SelectionStart = SelectionStart;
Box.SelectionLength = 0;
Box.SelectionColor = col;
// Or do you want to "hide" the text? White on White?
// Box.SelectionBackColor = col;
// set the selection to the text to be inserted
Box.SelectedText = Text;
// restore the values
// make sure to correct the start if the text
// is inserted before the oldStart
Box.SelectionStart = oldStart < SelectionStart ? oldStart : oldStart + Text.Length;
// overlap?
var oldEnd = oldStart + oldLen;
var selEnd = SelectionStart + Text.Length;
Box.SelectionLength = (oldStart < SelectionStart && oldEnd > selEnd) ? oldLen + Text.Length : oldLen;
}