【问题标题】:How to append the string at a cursor position in a rich text box C#?如何在富文本框C#中的光标位置附加字符串?
【发布时间】:2016-09-07 20:12:34
【问题描述】:

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

【问题讨论】:

    标签: c# append richtextbox


    【解决方案1】:

    因此,您需要订阅文本从文本框中更改的事件,这将为您提供已输入到光标处的文本。

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

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

    【讨论】:

    • 谢谢,我如何将它用于富文本框?
    • 其实我想创建文本编辑器,就像记事本等。
    • 啊,我的朋友,这是一个完全不同的问题。我想你可以用 TextBlock 做到这一点,但我不能告诉你这是否是正确的做法,或者是否有其他更优化的方法,抱歉
    【解决方案2】:

    当前光标位置也称为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; 
    }
    

    和往常一样,如果您想用新颜色为已经存在的部分着色,您需要选择该部分并再次设置颜色。最好为此使用调色板!使用一些彩色的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;
        }
    }
    

    【讨论】:

    • 我已添加此代码,它将数据插入到我想要的位置,但不会更改文本颜色。字符串插入文本 = 文本; int selectionIndex = richTextBox1.SelectionStart; richTextBox1.SelectionStart = selectionIndex ; richTextBox1.Text = richTextBox1.Text.Insert(selectionIndex, insertText); RichTextBox1.SelectionLength = 0; richTextBox1.SelectionColor=Color.Blue;
    • richTextBox1.Text = 这是一个错误。切勿使用任何格式更改 RTB 的 Text 属性,否则您会弄乱格式。要通过代码插入文本,请将 SelectionStart 设置为所需的位置,SelectionLength = 0 并写入 SelectedText = yourNewText。 - 您需要清楚发生了什么:用户输入新文本或用户为现有文本着色或代码添加/插入新文本或代码重新着色文本。您总是需要使用 SelectionColor = newColor 但准备会有所不同。
    • 它没有改变颜色。我使用的代码是:string insertText = Text; int selectionIndex = richTextBox1.SelectionStart; richTextBox1.SelectionStart = selectionIndex ; richTextBox1.SelectedText = 插入文本; richTextBox1.SelectionColor = Color.Blue;
    • 顺序错误:先设置颜色再设置文字!
    • 非常感谢!它工作得很好,因为我需要。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2013-08-03
    • 1970-01-01
    • 2020-10-24
    相关资源
    最近更新 更多