RichTextBox RTF issue



>我有一个 Rich TextBox in Win 表单应用程序,其中包含粗体、斜体、对齐等格式设置选项,右键单击 RTB 打开 ContexttoolStripmenu 带有从数据库中插入客户端地址的选项,这会在 RTB 文本中插入字符串"$[ClientAddress]"。单击保存按钮时$[ClientAddress]将替换为数据库中的实际地址(其格式为 rtf 格式,如下所示:

string rtfText = richTextBox.Rtf;
rtfText = rtfText.Replace("$[ClientAddress]", $address);

这里的问题是,当富文本框中的"$[ClientAddress]"被数据库中的实际地址字符串(RTF格式)替换时,所有在富文本框中完成的形成/样式都会丢失。

我们如何将 $[客户端地址] 上携带的样式(格式)传递给替换 $[客户端地址] 的文本。

如果地址作为纯文本而不是来自数据库的 rtf 文本传递,则格式保持不变,但不同地址行之间的换行符丢失,地址以一条直线打印,如下所示:

39 East Tamaki Road, Papatoetoe, Auckland, New Zealand instead of the correct way as below as originally entered :
39 East Tamaki Road
Papatoetoe
Auckland
New Zealand

我希望我能够把我的问题说清楚。

您是否考虑过剪贴板黑客中的旧粘贴?

下面是一个带有富文本框(rtb1)和一个按钮(button1)的通知的概念验证。对不起,它在 VB 中...

Public Class Form1
  Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    ' This Richtextbox just to create the text that's in the database.
    Dim rtb2 As New RichTextBox
    rtb2.Text = "39 East Tamaki Road" & vbCrLf & "Papatoetoe" & vbCrLf & "Auckland, New Zealand"
    rtb2.SelectAll()
    rtb2.SelectionFont = New Font("Courier", 20)
    rtb2.SelectionColor = Color.Blue

    ' This would be Clipboard.SetData(TextDataFormat.Rtf, $address)
    Clipboard.SetData(TextDataFormat.Rtf, rtb2.SelectedRtf)
    rtb2.DeselectAll()
    rtb2.Clear()

    ' This is adding text to an existing richtextbox and then pasting in the replacement text.
    Dim sPlaceHolder As String = "$[ClientAddress]"
    rtb1.Clear()
    rtb1.Text = "This is some random text plus the whole " & vbCrLf & sPlaceHolder & vbCrLf & "Place holder above."
    rtb1.SelectAll()
    rtb1.SelectionFont = New Font("Arial", 10)
    rtb1.SelectionColor = Color.DarkRed
    rtb1.DeselectAll()
    Dim istart As Integer = rtb1.Find(sPlaceHolder)
    Dim ilength As Integer = sPlaceHolder.Length
    rtb1.SelectionStart = istart
    rtb1.SelectionLength = ilength
    rtb1.SelectedRtf = Clipboard.GetData(TextDataFormat.Rtf)

  End Sub
End Class

最新更新