2016-01-27 2 views
1

У меня есть приложение RichTextBox в форме Winform с возможностями форматирования, например, жирным шрифтом, курсивом, параметрами выравнивания и т.д., щелчок правой кнопкой мыши по RTB открывает ContexttoolStripmenu с возможностью вставки адреса клиента из базы данных, которая вставляет строку "$[ClientAddress]" в текст RTB , При нажатии на кнопку сохранения щелкают $[ClientAddress] заменяется фактическим адресом из базы данных (который находится в формате RTF как в:RichTextBox RTF issue

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

Проблема здесь состоит в том, что все formationg/стайлинг сделано на «$ [ClientAddress]» в богатых текстовое поле теряется, когда оно заменяется фактической адресной строкой (в формате rtf) из базы данных.

Как мы можем передать стиль (формирование), переносимый на $ [ClientAddress], в текст, который заменяет $ [ClientAddress].

Если адрес передан как обычный текст вместо текста rtf из базы данных, тогда форматирование остается, но разрыв строки s между различными линиями адреса теряются и адрес печатается в одной прямой, как:

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 

Я надеюсь, что я был в состоянии сделать мою проблему ясно.

ответ

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