首页 文章

RichTextBox RTF问题

提问于
浏览
1

我在Win窗体应用程序中有一个RichTextBox,具有粗体,斜体,对齐等选项等格式化工具,右键单击RTB打开ContexttoolStripmenu,可以选择从数据库插入客户端地址,在RTB文本中插入字符串 "$[ClientAddress]" . 单击保存按钮时, $[ClientAddress] 将替换为数据库中的实际地址(采用rtf格式,如下所示:

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

这里的问题是,当它被来自数据库的实际地址字符串(rtf格式)替换时,在富文本框中的“$ [ClientAddress]”上完成的所有形成/样式都将丢失 .

我们如何将$ [ClientAddress]上的样式(格式化)传递给替换$ [ClientAddress]的文本 .

如果地址作为纯文本而不是数据库中的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

我希望我能够清楚地解决问题 .

1 回答

  • 0

    您是否考虑过从剪贴板中删除它的旧粘贴?

    下面是winform上的概念验证,其中包含richtextbox(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
    

相关问题