Back to Devexpress

Paragraphs in Rich Text Documents

windowsforms-9556-controls-and-libraries-rich-text-editor-rich-edit-control-document-paragraphs.md

latest14.3 KB
Original Source

Paragraphs in Rich Text Documents

  • Nov 29, 2024
  • 6 minutes to read

Paragraphs in the User Interface

Users can press Enter to divide text into paragraphs. The Paragraph group on the Home ribbon tab allows you to format paragraphs. Refer to the How to: Create the RichEditControl with a Ribbon UI lesson for information on how to create a RichEditControl application with a Ribbon UI.

Use the Paragraph Dialog to specify advanced paragraph settings. You can invoke this dialog from the ribbon group or from the context menu.

Tip

You can restrict users from formatting paragraphs or creating new paragraphs. Set the DocumentCapabilitiesOptions.Paragraphs, ParagraphFormatting, or ParagraphTabs property to DocumentCapability.Hidden or DocumentCapability.Disabled to disable or hide the corresponding commands in the command UI and the pop-up menu.

The RichEditControl can display, print, and export to PDF format documents with paragraph borders.

Note

The control does not ship with the User Interface elements to create or modify paragraph borders.

Paragraphs in Code

Obtain Paragraphs

The ParagraphCollection holds all document paragraphs. Access specific paragraphs by their index with the SubDocument.Paragraphs property. The Section.Paragraphs property allows you to retrieve paragraphs within a specific document section. Alternatively, retrieve paragraphs for a specified range by the Paragraphs.Get method call.

The code snippet retrieves the paragraph related to the specified position and appends text to the end of this paragraph:

csharp
using DevExpress.XtraRichEdit.API.Native;

Document document = richEditControl.Document;

document.BeginUpdate();

// Append text to the document (multiple paragraphs).
document.AppendText("First Paragraph\nSecond Paragraph\nThird Paragraph");    
document.EndUpdate();

// Access the end position of the document range.
DocumentPosition position = document.Range.End;

// Append text to the end of the last paragraph.
SubDocument doc = position.BeginUpdateDocument();
Paragraph par = doc.Paragraphs.Get(position);
DocumentPosition newPos = doc.CreatePosition(par.Range.End.ToInt() - 1);
doc.InsertText(newPos, "<<Appended to Paragraph End>>");
pos.EndUpdateDocument(doc);
vb
Imports DevExpress.XtraRichEdit.API.Native

Dim document As Document = richEditControl.Document

document.BeginUpdate()

' Append text to the document (multiple paragraphs).
document.AppendText("First Paragraph" & vbLf & "Second Paragraph" & vbLf & "Third Paragraph")
document.EndUpdate()

' Access the end position of the document range.
Dim position As DocumentPosition = document.Range.End

' Append text to the end of the last paragraph.
Dim doc As SubDocument = position.BeginUpdateDocument()
Dim par As Paragraph = doc.Paragraphs.Get(position)
Dim newPos As DocumentPosition = doc.CreatePosition(par.Range.End.ToInt() - 1)
doc.InsertText(newPos, "<<Appended to Paragraph End>>")
pos.EndUpdateDocument(doc)

Add New Paragraph

To insert a new paragraph, use one of these methods:

MethodDescription
ParagraphCollection.AppendAppends a new paragraph.
ParagraphCollection.InsertInserts a new paragraph at the specified document position and returns the paragraph that follows the inserted paragraph.

The following code snippet appends a paragraph and inserts a paragraph at the start of the second section:

csharp
using DevExpress.XtraRichEdit.API.Native;

richEditControl.LoadDocument("FirstLook.docx");
Document document = richEditControl.Document;
document.BeginUpdate();

// Append a paragraph:
Paragraph appendedParagraph = document.Paragraphs.Append();
document.InsertText(appendedParagraph.Range.Start, "Appended paragraph");

// Insert a new paragraph at the start of the second section:
Paragraph paragraph = document.Paragraphs.Insert(document.Sections[1].Range.Start);
document.InsertText(document.Paragraphs[paragraph.Index - 1].Range.Start,
    "Inserted paragraph");
document.EndUpdate();
vb
Imports DevExpress.XtraRichEdit.API.Native

richEditControl.LoadDocument("FirstLook.docx")
Dim document As Document = richEditControl.Document
document.BeginUpdate()

' Append a paragraph:
Dim appendedParagraph As Paragraph = document.Paragraphs.Append()
document.InsertText(appendedParagraph.Range.Start, "Appended paragraph")

' Insert a new paragraph at the start of the second section:
document.InsertText(document.Paragraphs[paragraph.Index - 1].Range.Start
        "Inserted paragraph");
document.InsertText(paragraph.Range.Start, "Inserted paragraph")
document.EndUpdate()

Format Paragraphs

Format paragraphs directly or apply document styles. For more examples on formatting paragraphs, refer to this topic: Text Formatting

The following snippet changes paragraph formatting in code:

View Example: WinForms RichEdit Document API

csharp
using DevExpress.XtraRichEdit.API.Native;
using DevExpress.Office.Utils;

document.BeginUpdate();
document.AppendText("Modified Paragraph\nNormal\nNormal");
document.EndUpdate();

// Obtain the first paragraph range
DocumentRange range = document.Paragraphs[0].Range;

// Obtain paragraph options
ParagraphProperties pp = document.BeginUpdateParagraphs(range);

// Center a paragraph
pp.Alignment = ParagraphAlignment.Center;

// Set triple spacing
pp.LineSpacingType = ParagraphLineSpacing.Multiple;
pp.LineSpacingMultiplier = 3;

// Set left indent at 0.5".
// Default unit is 1/300 of an inch (a document unit).
pp.LeftIndent = Units.InchesToDocumentsF(0.5f);

// Set a tab stop at 1.5"
TabInfoCollection tbiColl = pp.BeginUpdateTabs(true);
TabInfo tbi = new TabInfo();
tbi.Alignment = TabAlignmentType.Center;
tbi.Position = Units.InchesToDocumentsF(1.5f);
tbiColl.Add(tbi);
pp.EndUpdateTabs(tbiColl);

//Finalize the update
document.EndUpdateParagraphs(pp);
vb
Imports DevExpress.XtraRichEdit.API.Native
Imports DevExpress.Office.Utils

document.BeginUpdate()
document.AppendText("Modified Paragraph" & vbLf & "Normal" & vbLf & "Normal")
document.EndUpdate()

' Obtain the first paragraph range
Dim pos As DocumentPosition = document.Range.Start
Dim range As DocumentRange = document.CreateRange(pos, 0)

' Obtain paragraph options
Dim pp As ParagraphProperties = document.BeginUpdateParagraphs(range)

' Center a paragraph
pp.Alignment = ParagraphAlignment.Center

' Set triple spacing
pp.LineSpacingType = ParagraphLineSpacing.Multiple
pp.LineSpacingMultiplier = 3

' Set left indent at 0.5".

' Default unit is 1/300 of an inch (a document unit).
pp.LeftIndent = Units.InchesToDocumentsF(0.5F)

' Set a tab stop at 1.5"
Dim tbiColl As TabInfoCollection = pp.BeginUpdateTabs(True)
Dim tbi As TabInfo = New TabInfo()
tbi.Alignment = TabAlignmentType.Center
tbi.Position = Units.InchesToDocumentsF(1.5F)
tbiColl.Add(tbi)
pp.EndUpdateTabs(tbiColl)

'Finalize the update
document.EndUpdateParagraphs(pp)

Set Paragraph Borders

Obtain border settings for a specific range through the ParagraphProperties.Borders property.

The Paragraph.Borders property allows you to specify borders for an individual paragraph. Call the ParagraphBorders.Reset() method to reset borders.

The following code snippet sets borders for multiple paragraphs:

csharp
using DevExpress.XtraRichEdit;
using DevExpress.XtraRichEdit.API.Native;
using System.Drawing;

Document document = richEditControl.Document;

// Start to edit the document.
document.BeginUpdate();

// Append text to the document.
document.AppendText(String.Format("Modified Paragraph" + 
    Environment.NewLine + "Normal" + Environment.NewLine + "Normal"));

// Finalize the edit operation.
document.EndUpdate();

// Obtain a range from the first to the last paragraph
Paragraph firstParagraph = document.Paragraphs[0];
Paragraph thirdParagraph = document.Paragraphs[2];
DocumentRange paragraphRange = 
    document.CreateRange(firstParagraph.Range.Start, thirdParagraph.Range.End.ToInt() - firstParagraph.Range.Start.ToInt());

// Start to edit the paragraph.
ParagraphProperties pp = document.BeginUpdateParagraphs(paragraphRange);
SetBorder(pp.Borders.HorizontalBorder);
SetBorder(pp.Borders.BottomBorder);
SetBorder(pp.Borders.TopBorder);
SetBorder(pp.Borders.LeftBorder);
SetBorder(pp.Borders.RightBorder);

// Finalize the edit operation.
document.EndUpdateParagraphs(pp);

static void SetBorder(ParagraphBorder border)
{
    border.LineWidth = 2f;
    border.LineStyle = BorderLineStyle.Thick;
    border.LineColor = Color.SteelBlue;
}
vb
Imports Microsoft.VisualBasic
Imports DevExpress.XtraRichEdit
Imports DevExpress.XtraRichEdit.API.Native
Imports System.Drawing

Dim document As Document = richEditControl.Document

' Start to edit the document.
document.BeginUpdate()

' Append text to the document.
document.AppendText(String.Format("Modified Paragraph" & Environment.NewLine & "Normal" & Environment.NewLine & "Normal"))
' Finalize the edit operation.
document.EndUpdate()

' Obtain the range from the first to the last paragraph
Dim firstParagraph As Paragraph = document.Paragraphs(0)
Dim thirdParagraph As Paragraph = document.Paragraphs(2)
Dim paragraphRange As DocumentRange = document.CreateRange(first.Range.Start, third.Range.End.ToInt() - firstParagraph.Range.Start.ToInt())

' Start to edit the paragraph.
Dim pp As ParagraphProperties = document.BeginUpdateParagraphs(paragraphRange)
SetBorder(pp.Borders.HorizontalBorder)
SetBorder(pp.Borders.BottomBorder)
SetBorder(pp.Borders.TopBorder)
SetBorder(pp.Borders.LeftBorder)
SetBorder(pp.Borders.RightBorder)

' Finalize the edit operation.
document.EndUpdateParagraphs(pp)

Shared Sub SetBorder(ByVal border As ParagraphBorder)
    border.LineWidth = 2F
    border.LineStyle = BorderLineStyle.Thick
    border.LineColor = Color.SteelBlue
End Sub

Remove Paragraphs

Call the SubDocument.Delete method and pass the paragraph range as the method parameter to remove the paragraph from the document.

The following code snippet locates and removes paragraphs at the end of the first section:

csharp
using DevExpress.XtraRichEdit.API.Native;
using System.Linq;

richEditControl.LoadDocument("FirstLook.docx");
Document document = richEditControl.Document;
document.BeginUpdate();

// Retrieve the first section:
Section firstSection = document.Sections[0];

// Calculate the length of the last two paragraphs:
Paragraph lastParagraph = firstSection.Paragraphs.Last();
Paragraph secondLastParagraph =
         firstSection.Paragraphs[lastParagraph.Index - 1];
int length = secondLastParagraph.Range.Length + lastParagraph.Range.Length;

// Define a range to delete:
DocumentRange deleteRange =
    document.CreateRange(secondLastParagraph.Range.Start, length);

// Clear the range:
document.Delete(deleteRange);

document.EndUpdate();
vb
Imports DevExpress.XtraRichEdit.API.Native
Imports System.Linq

richEditControl.LoadDocument("FirstLook.docx")
Dim document As Document = richEditControl.Document
document.BeginUpdate()

' Retrieve the first section:
Dim firstSection As Section = document.Sections(0)

' Calculate the length of the last two paragraphs:
Dim lastParagraph As Paragraph = firstSection.Paragraphs.Last()
Dim secondLastParagraph As Paragraph =
         firstSection.Paragraphs(lastParagraph.Index - 1)
Dim length As Integer = secondLastParagraph.Range.Length + lastParagraph.Range.Length

' Define a range to delete:
Dim deleteRange As DocumentRange =
    document.CreateRange(secondLastParagraph.Range.Start, length)

' Clear the range:
document.Delete(deleteRange)

document.EndUpdate()

See Also

How to: Change Formatting of the Current Paragraph

Format Text in Rich Text Documents

Document Model