gpt4 book ai didi

c# - 在 RichTextbox 的特定索引处插入具有特定颜色的文本

转载 作者:太空宇宙 更新时间:2023-11-03 12:43:10 25 4
gpt4 key购买 nike

我想在我的 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),则当用户点击“)”时,第一个括号将是彩色的,并保留在此括号上的选择。

最佳答案

您必须使用 SelectedText RichTextBox 控件的属性。还要确保在更改任何内容之前跟踪当前选择的值。

您的代码应该如下所示(我泄露了 Hans 的暗示):

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;
}

关于c# - 在 RichTextbox 的特定索引处插入具有特定颜色的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38218876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com