如何在富文本框 C# 中的光标位置追加字符串?

How to append the string at a cursor position in a rich text box C#?

我想在富文本框中光标闪烁的位置添加字符串。我还想更改我输入的文本的颜色。例如,如果预先输入了黑色的文本,那么我输入了一个新的字符串,那么这个字符串应该是蓝色的。它应该是我输入字符串的所有时间。而我输入的字符串,它们应该保持蓝色。谢谢

因此您需要订阅文本框文本发生变化的事件,这将为您提供已输入到光标处的文本。

那么只需将文本附加到语句中就很简单了,您可以在其中应用不同的格式,如下所述:

http://www.wpf-tutorial.com/basic-controls/the-textblock-control-inline-formatting/

当前光标位置也称为SelectionStart。只需设置 SelectionStart=0,然后设置您想要的所有 SelectionXXX 属性:

richtTextBox1.SelectionLength=0;
richtTextBox1.SelectionColor = Color.Blue;

现在您输入的所有内容都会变成蓝色。

不多也不少。无需订阅 TextChanged 事件。

请注意,如果您将光标位置移动到不同的位置,该位置将有自己的颜色,当您在那里输入新文本时,它也会有该颜色。

如果您想将新颜色(蓝色)应用到其他地方,您需要对 SelectionChanged 事件进行编码,可能如下所示:

private void richTextBox1_SelectionChanged(object sender, EventArgs e)
{
     // you should check if there is no text selected
     // or else any selection will be colored immediately: 
     if ( richTextBox1.1.SelectionLength  == 0)
       richTextBox1.1.SelectionColor = yourNewColor; 
}

和往常一样,如果您想用新颜色为已经存在的部分着色,您需要 select 该部分并再次设置颜色。最好为此使用调色板!使用一些彩色 Labels 你可以写:

private void colorLabel_Click(object sender, EventArgs e)
{
     Color yourNewColor= ((sender) as Label).BackColor;
     richTextBox1.1.SelectionColor = yourNewColor; 
}

如果您愿意,可以在 Panel's BackgroundImage 中使用更丰富的调色板图像并为其 MouseClick 事件编写代码:

private void panel1_MouseClick(object sender, MouseEventArgs e)
{
    Color c = ((Bitmap)panel1.BackgroundImage).GetPixel(e.X, e.Y);
    if (e.Button.HasFlag(MouseButtons.Left))
    { 
        richTextBox1.SelectionColor = c;
    }
    else  // pick new BackColor:
    { 
        richTextBox1.SelectionBackColor = c;
    }
}