Отступ текста RTF в RichTextBox без потери стиля RTF

Я хотел бы сделать отступ текста RTF в RichTextBox, не теряя стиля RTF.

Dim Alinea As String = "    "

Private Sub Indent_Click(sender As Object, e As EventArgs) Handles Indent.Click
    Try
        Dim Output As String = Nothing
        Dim Split() As String = RichTextBox1.Lines
        For i = 0 To Split.Length - 1
            Output = String.Concat(Output, Split(i).Insert(0, Alinea), If(Not i = Split.Length - 1, vbNewLine, Nothing))
        Next
        RichTextBox1.Text = Output
    Catch ex As Exception
        MsgBox(ex.Message)
    End Try
End Sub

Предыдущий код работает, но возвращает текст без какого-либо стиля.

Я просто хотел бы добавить Alinea ко всем началам строки текста RichTextBox. Я пытался использовать свойство RichTextBox1.Rtf, но оно показывает MsgBox с сообщением «Недопустимый формат файла».


person Drarig29    schedule 06.08.2015    source источник


Ответы (1)


Вместо использования RichTextBox1.Lines используйте RichTextBox1.Rtf.

RichTextBox1.Rtf = RichTextBox1.Rtf.Replace(vbCrLf, vbCrLf & vbTab)

Это работает, но вы можете захотеть ввести что-то вроде \par или \par & vbcrlf, чтобы больше соответствовать стандарту rtf.

RichTextBox1.Rtf = RichTextBox1.Rtf.Replace("\par" & vbCrLf, "\par" & vbCrLf & vbTab)

«Оставляем читателю в качестве упражнения», чтобы заставить его работать в первой строке и для любого символа пробела, следующего за «\par». (Я всегда ненавидел эту фразу.)

person xpda    schedule 07.08.2015
comment
Проблема с использованием Replace vbCrLf заключается в том, что он не работает для первой строки... Есть ли другой способ с циклом, как я делал раньше? - person Drarig29; 07.08.2015
comment
Вы можете сделать это с помощью цикла, однако нет свойства, которое предоставляет отдельные строки форматированного текста. Вам нужно будет сделать это перед циклом с функцией разделения строки или чем-то подобным. - person xpda; 07.08.2015