【问题标题】:Appending Contents of two RichTextbox as a single RichText string将两个 RichTextbox 的内容附加为单个 RichText 字符串
【发布时间】:2011-06-27 00:55:23
【问题描述】:

我想在 Windows Forms .Net 应用程序中附加两个富文本框的内容;说:stringText = richtextbox1.Rtf + richtextbox2.Rtf; stringText 应该是 RTF 文本,应该有一次 \rtf 行,并连接富文本。

剪贴板不在此处的范围内。

另外,我很好奇,我们是否可以将它们拆分。

【问题讨论】:

  • 如果您将此链接到我之前的问题,将 RTF 转换为 WordML,是的,它仍未解决。 XAML 作为解决方案不适用于 .net 2.0 winForms,而使用 XML SDK 是最后的选择,我的经理建议我使用,因为这需要时间。建议我在 WordML 中合并 RTF 丰富的字符串和替换,并在 WordML 中转换这个新的 RTF 并拆分和插入。我知道这听起来不好,但是,我必须准确地报告。
  • 你能把 RTF 转换成 WordML 吗?
  • 如果我遇到这些问题,我可能会直接购买 Aspose Words 并继续下一个项目。
  • 我建议将其用于项目,但他们强制要求在内部构建一些东西。

标签: c# .net windows winforms


【解决方案1】:

试试这个:

richTextBoxTarget.Select(richTextBoxTarget.TextLength, 0);
richTextBoxTarget.SelectedRtf = richTextBoxSource.Rtf;

这会将richTextBoxSource 的内容合并到richTextBoxTarget 的末尾。它会自动创建只有一个 \rtf 标签的有效 RTF。
要取消合并,还可以使用 SelectSelectedRtf。这里唯一的要求是,您需要知道要在哪个位置拆分。

【讨论】:

  • @Daniel Hilgarth,混淆可能是您的示例仅显示 1 个来源,因此您似乎没有解决从 2 个来源合并 RTF 的问题。
  • @adrift:不,它没有。它包含两个来源。它将一个 RTB 的内容添加到另一个 RTB 的末尾,而后者又可以包含 Rtf 文本。
  • 嗨,丹尼尔,感谢您的回答。但是,我的要求在这里有所不同。这与我原来的要求有关:stackoverflow.com/questions/4944813/rtf-to-wordml-convert-in-c
  • 我仍然坚信,我的回答确实对您有所帮助。我不明白,您在另一个问题中的要求如何导致我的解决方案不起作用。你能解释一下吗?基本上,当您将 Rtf 文本分配给 RichTextBox 类的 SelectedRtf 属性时,它会将分配的 Rtf 数据流式传输到现有数据中,从而合并两个 Rtf 数据。根据你的问题,这正是你想要的。 richTextBoxTarget.Rtf 包含 merged Rtf。这正是您在问题中提出的问题:“stringText =richtextbox1.Rtf + richtextbox2.Rtf;”
  • 是的,先生,它合并了两个多个富文本框,但问题在于取消合并。我如何取消合并它们。我确实对他们有分寸。合并和取消合并的目的是我想进行一次单词操作并转换为 WordML 然后拆分。是否有一些我可以附加的标签或保护位,以便我可以取消合并它们。
【解决方案2】:

我知道这是一个老问题,但它似乎是一个常见问题。因此,我将对此添加我的答案,导致标记的答案使 RTF 连接起来,但它每次都会给出一个额外的新行。

这将是:

RichTextBoxSource.Select(0,RichTextBoxSource.TextLength);
RichTextBoxTarget.SelectedRtf = richTextBoxSource.SelectedRtf;

这很简单,而且效果很好。希望它会帮助某人:)

【讨论】:

    【解决方案3】:

    不确定这是否有用,但这是重新格式化为扩展方法的上述代码。 这让你说:

    textBox.AppendRtf(someRtfString)
    

    RichTextBox 类的AppendText() 方法相匹配。

    ''' <summary>
    ''' Appends the provided RTF-formatted string to the provided <see cref="RichTextBox"/>.
    ''' </summary>
    <Extension()> _
    Public Sub AppendRtf(ByVal rtbTextBox As RichTextBox, ByVal strRtf As String)
        rtbTextBox.Select(rtbTextBox.TextLength, 0)
        rtbTextBox.SelectedRtf = strRtf
    End Sub
    

    【讨论】:

      【解决方案4】:

      好吧,既然我不能评论 Pawel anwser,我必须在他的代码之外添加:

      RichTextBoxSource.Select(0,RichTextBoxSource.TextLength);
      RichTextBoxTarget.SelectedRtf = richTextBoxSource.SelectedRtf;
      

      如果您希望新文本始终位于顶部,则应添加

      RichTextBoxTarget.Select(0,0);
      

      或者如果您希望它始终位于底部

      RichTextBoxTarget.Select(RichTextBoxTarget.TextLength,0);
      

      因此,即使目标富文本框是可点击的,您也可以像丹尼尔回答那样控制位置。

      【讨论】:

        猜你喜欢
        • 2013-07-05
        • 1970-01-01
        • 2016-03-31
        • 1970-01-01
        • 2012-12-03
        • 2020-09-07
        • 2012-12-27
        • 2015-01-04
        • 1970-01-01
        相关资源
        最近更新 更多