如何在 RichTextBox 中附加 RTF 文本,Win C#

Var*_*nJi 5 c# append richtextbox

我在 Win C# 中有一个 RichTextBox,我想在 RichTextBox 中附加一些带有粗体效果的新文本。那我该怎么做。

我试过

string str = richTextBox.Rtf;

//my logic
str+= @"\rtf1\ansi Adding Some \b Text\b0.}";
//
Run Code Online (Sandbox Code Playgroud)

现在追加

richTextbox.AppendText(str);
Run Code Online (Sandbox Code Playgroud)

但它没有显示正确。

我之前的输出

这是一句话。

我想要输出像

这是一句话。添加一些文本

那么我该怎么做呢?

CJB*_*JBS 9

以下函数引用 RichTextBox 以及一些格式参数。该功能记录在案:

/// <summary>
/// Append formatted text to a Rich Text Box control 
/// </summary>
/// <param name="rtb">Rich Text Box to which horizontal bar is to be added</param>
/// <param name="text">Text to be appended to Rich Text Box</param>
/// <param name="textColour">Colour of text to be appended</param>
/// <param name="isBold">Flag indicating whether appended text is bold</param>
/// <param name="alignment">Horizontal alignment of appended text</param>
private void AppendFormattedText(RichTextBox rtb, string text, Color textColour, Boolean isBold, HorizontalAlignment alignment)
{
    int start = rtb.TextLength;
    rtb.AppendText(text);
    int end = rtb.TextLength; // now longer by length of appended text

    // Select text that was appended
    rtb.Select(start, end - start);

    #region Apply Formatting
    rtb.SelectionColor = textColour;
    rtb.SelectionAlignment = alignment;
    rtb.SelectionFont = new Font(
         rtb.SelectionFont.FontFamily,
         rtb.SelectionFont.Size,
         (isBold ? FontStyle.Bold : FontStyle.Regular));
    #endregion

    // Unselect text
    rtb.SelectionLength = 0;
}
Run Code Online (Sandbox Code Playgroud)

以下代码添加了原文:

这是一句话。

// This creates the original text
AppendFormattedText(richTextBox, "This is ", Color.Black, false, HorizontalAlignment.Left);
AppendFormattedText(richTextBox, "First", Color.Black, true, HorizontalAlignment.Left);
AppendFormattedText(richTextBox, " Word.", Color.Black, false, HorizontalAlignment.Left);
Run Code Online (Sandbox Code Playgroud)

...然后在末尾附加一个句子,这样富文本框的内容就可以了:

这是一句话。添加一些文本

// This appends additional text
AppendFormattedText(richTextBox, " Adding Some ", Color.Black, false, HorizontalAlignment.Left);
AppendFormattedText(richTextBox, "Text", Color.Black, true, HorizontalAlignment.Left);
AppendFormattedText(richTextBox, ".", Color.Black, false, HorizontalAlignment.Left);
Run Code Online (Sandbox Code Playgroud)

除了问题中要求的内容之外,还有其他参数(例如颜色),但这些构成了所有格式化操作的基础,这些操作可以通过选择-格式化-取消选择格式化方法来完成,而不是手动编辑RTF 代码。


Cha*_*lky 5

假设插入点在最后(默认情况下),只需执行以下操作:

richTextBox1.SelectedRtf = @"{\rtf1\ansi Adding some \b text\b0.}";


小智 -1

尽管我见过很多使用剪贴板的示例,这是在富文本控件中的任何位置插入图像的绝佳方法(只需使用富文本控件的 Paste() 方法),但最简单的解决方案是将目标 SelectionStart 属性简单地放置到其 TextLength 属性,确保其 SelectionLength 属性为零,然后将源的 SelectedRtf 属性的内容填充到现在为空的目标 SelectedRtf。当然,需要注意的是,您不应尝试将 RTF 属性的全部内容插入到目标 Rtf 属性中。你只是想要选择。有时,我必须通过创建隐藏的富文本控件来解决此问题,用要插入的完整 RTF 文本填充其 Rtf 属性,调用其 SelectAll 方法以选择我要插入的所有文本,然后插入该控件RTB 的 SelectedRtf 属性设置为目标 SelectedRtf 属性。

  • 请重新格式化您的答案以使其更加清晰并使用代码示例。 (2认同)