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

Posted

技术标签:

【中文标题】如何在 RichTextBox 中添加 RTF 文本,Win C#【英文标题】:How to Append RTF Text in RichTextBox, Win C# 【发布时间】:2014-04-14 19:30:33 【问题描述】:

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

我试过了

string str = richTextBox.Rtf;

//my logic
str+= @"\rtf1\ansi Adding Some \b Text\b0.";
//

现在追加

richTextbox.AppendText(str);

但它显示不正确。

我之前的输出

这是第一个字。

我想要像这样的输出

这是第一个字。添加一些文本

那么我该怎么做呢?

【问题讨论】:

你的问题对我来说似乎有点不清楚。 richTextBox.Rtf 的值究竟是多少?如果您使用逐字字符串文字,您的转义字符也会打印出来。 AppendText 方法应该完全符合您的尝试。 richTextBox.Rtf 值为“This is First Word”。其中 First 是粗体。我想附加一个新文本,它有粗体文本。 【参考方案1】:

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

【讨论】:

请重新格式化您的答案以更清晰并使用代码示例。【参考方案2】:

以下函数采用对 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;

以下代码添加原文:

这是第一个字。

// 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);

...然后在末尾附加一个句子,使得富文本框的内容如愿:

这是第一个字。添加一些文本

// 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);

除了问题中要求的参数之外,还有其他参数(例如颜色),但这些参数构成了可以使用 select-format-deselect 格式化方法完成的所有格式化操作的基础,而不是而不是手动编辑 RTF 代码。

【讨论】:

【参考方案3】:

假设插入点位于末尾(默认情况下),只需执行以下操作:

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

【讨论】:

这个小代码很好用!插入后用新段落括起来:richTextBox1.SelectedRtf = @"\rtf1\ansi \b Line Before \b0.\line";【参考方案4】:

我找到了解决方案 这个对我有用

var rtb = new RichTextBox()
   Rtf= obj.TOCOMM ;
rtb.SelectAll();
rtb.Copy();
RTXT_DoText.Paste();

【讨论】:

不好。未经用户许可,切勿修改剪贴板内容。

以上是关于如何在 RichTextBox 中添加 RTF 文本,Win C#的主要内容,如果未能解决你的问题,请参考以下文章

如何将 BlockUIContainer 中 RichTextBox 的内容保存到 RTF 文件?

在使用VB的RichTextBox控件时加载文档(RTF)出现错误,应用程序出错,不能写入。

RichTextBox.RTF 设置器抛出 System.ArgumentException。文件格式在 Windows 版本 1803 中无效

如何在 C# 中将文本提取/插入到 RTF 字符串中

如何让RichTextBox自动调整大小

c# richtextbox : 如果把richtextbox中的文字图片保存到数据库(access)中。