在富文本框中具有特定颜色的特定索引处插入文本

本文关键字:颜色 索引 插入文本 文本 | 更新日期: 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;  
}