# Events

> All events of ServerTextControl: document loading, created and deleted document elements, replaced fonts, spell checking, hyphenation and XML validation.

- **Product:** TX Text Control .NET Server
- **Section:** Documentation
- **Kind:** Topic
- **Path:** TX Text Control .NET Server > Document Processing > Events
- **4523 words**
- **Web URL:** https://docs.textcontrol.com/tx-text-control-dotnet-server/document-processing/events/
- **LLMs URL:** https://docs.textcontrol.com/tx-text-control-dotnet-server/document-processing/events/llms.txt
- **LLMs-Full URL:** https://docs.textcontrol.com/tx-text-control-dotnet-server/document-processing/events/llms-full.txt

---

On a server, no user clicks or types, so the events of `ServerTextControl` report what happens to the document itself: which tables, images and tracked changes a loaded document contains, which fonts had to be replaced and which elements your code removed. Every event is listed below with when it occurs and what its arguments contain, followed by two typical uses.

Events of a mail merge are described in [Overview](https://docs.textcontrol.com/tx-text-control-dotnet-server/mail-merge/overview/#follow-the-merge-with-events) of Mail Merge and Reporting, and the JavaScript events of the browser components in [Events](https://docs.textcontrol.com/tx-text-control-dotnet-server/document-editor/events/llms-full.txt) of the Document Editor and [Events](https://docs.textcontrol.com/tx-text-control-dotnet-server/document-viewer/events/llms-full.txt) of the Document Viewer.

### How Events Work on the Server

You handle an event of [ServerTextControl](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/llms-full.txt) like any .NET event, with a method or a lambda expression added with `+=`. Three rules help you use them:

- **Attach handlers before loading.** Most events occur while a document is loaded, so the handler must be attached before `Load` is called.
- **Created events report loaded content.** For images, text frames, charts, barcodes, drawings and signature fields, the Created event occurs when a document that contains them is loaded, not when your code adds one with the `Add` method of its collection.
- **Deleted events report removed content.** For images, text frames, charts, barcodes, drawings and signature fields, the Deleted event also occurs when your code removes the element with the `Remove` method of its collection. Inside a Deleted handler, only some properties of the removed element are still valid, as the table below notes.

### Document Events

| Event | Occurs | Arguments |
|---|---|---|
| [DocumentLoaded](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/documentloaded-event/llms-full.txt) | When a new document has been loaded | `EventArgs` |
| [ContentsReset](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/contentsreset-event/llms-full.txt) | When all text contents have been deleted and all attributes have been reset to the state after initialization | `EventArgs` |

### Events of Document Elements

Each kind of document element has a Created and a Deleted event. The element is in a property of the event arguments:

| Element | Events | Arguments and property | Occurs |
|---|---|---|---|
| Tables | [TableCreated](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/tablecreated-event/llms-full.txt), [TableDeleted](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/tabledeleted-event/llms-full.txt) | [TableEventArgs.Table](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/tableeventargs/table-property/llms-full.txt) | Created for a table without an ID in a loaded document, not for tables that have an ID. After deletion, only `Table.ID` is valid |
| Images | [ImageCreated](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/imagecreated-event/llms-full.txt), [ImageDeleted](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/imagedeleted-event/llms-full.txt) | [ImageEventArgs.Image](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/imageeventargs/image-property/llms-full.txt) | Created when a document with images is loaded; deleted also by `ImageCollection.Remove` |
| Text frames | [TextFrameCreated](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/textframecreated-event/llms-full.txt), [TextFrameDeleted](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/textframedeleted-event/llms-full.txt) | [TextFrameEventArgs.TextFrame](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/textframeeventargs/textframe-property/llms-full.txt) | Created for each text frame of a loaded document; deleted also by `TextFrameCollection.Remove` |
| Charts | [ChartCreated](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/chartcreated-event/llms-full.txt), [ChartDeleted](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/chartdeleted-event/llms-full.txt) | [ChartEventArgs.ChartFrame](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol-datavisualization/charteventargs/chartframe-property/llms-full.txt) | Created when a document with charts is loaded; deleted by `ChartCollection.Remove` |
| Barcodes | [BarcodeCreated](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/barcodecreated-event/llms-full.txt), [BarcodeDeleted](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/barcodedeleted-event/llms-full.txt) | [BarcodeEventArgs.BarcodeFrame](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol-datavisualization/barcodeeventargs/barcodeframe-property/llms-full.txt) | Created when a document with barcodes is loaded; deleted by `BarcodeCollection.Remove` |
| Drawings | [DrawingCreated](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/drawingcreated-event/llms-full.txt), [DrawingDeleted](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/drawingdeleted-event/llms-full.txt) | [DrawingEventArgs.DrawingFrame](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol-datavisualization/drawingeventargs/drawingframe-property/llms-full.txt) | Created when a document with drawings is loaded; deleted also by `DrawingCollection.Remove` |
| Signature fields | [SignatureFieldCreated](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/signaturefieldcreated-event/llms-full.txt), [SignatureFieldDeleted](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/signaturefielddeleted-event/llms-full.txt) | [SignatureFieldEventArgs.SignatureField](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/signaturefieldeventargs/signaturefield-property/llms-full.txt) | Created when a document with signature fields is loaded; deleted also by `SignatureFieldCollection.Remove` |
| Tracked changes | [TrackedChangeCreated](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/trackedchangecreated-event/llms-full.txt), [TrackedChangeDeleted](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/trackedchangedeleted-event/llms-full.txt) | [TrackedChangeEventArgs.TrackedChange](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/trackedchangeeventargs/trackedchange-property/llms-full.txt) | Created when a document with tracked changes is loaded; deleted when a change is accepted or rejected. After deletion, `ChangeKind`, `UserName`, `ChangeTime`, `HighlightColor` and `HighlightMode` are valid |
| Subtext parts | [SubTextPartCreated](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/subtextpartcreated-event/llms-full.txt), [SubTextPartDeleted](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/subtextpartdeleted-event/llms-full.txt) | [SubTextPartEventArgs.SubTextPart](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/subtextparteventargs/subtextpart-property/llms-full.txt) | When a subtext part has been created or deleted. After deletion, `ID`, `Name`, `HighlightColor` and `HighlightMode` are valid |
| Editable regions | [EditableRegionCreated](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/editableregioncreated-event/llms-full.txt), [EditableRegionDeleted](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/editableregiondeleted-event/llms-full.txt) | [EditableRegionEventArgs.EditableRegion](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/editableregioneventargs/editableregion-property/llms-full.txt) | When an editable region has been created or deleted. After deletion, `ID`, `UserName`, `HighlightColor` and `HighlightMode` are valid |
| Text fields | [TextFieldCreated](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/textfieldcreated-event/llms-full.txt), [TextFieldDeleted](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/textfielddeleted-event/llms-full.txt) | [TextFieldEventArgs.TextField](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/textfieldeventargs/textfield-property/llms-full.txt) | When a text field has been created or deleted. The field can be of any field class, such as an application field, a hypertext link or a form field. After deletion, `ID` and `Name` are valid |
| Bookmarks | [DocumentTargetCreated](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/documenttargetcreated-event/llms-full.txt), [DocumentTargetDeleted](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/documenttargetdeleted-event/llms-full.txt) | [DocumentTargetEventArgs.DocumentTarget](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/documenttargeteventargs/documenttarget-property/llms-full.txt) | When a document target has been created or deleted. After deletion, `TargetName`, `Deleteable`, `ID` and `Name` are valid |
| Tables of contents | [TableOfContentsCreated](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/tableofcontentscreated-event/llms-full.txt), [TableOfContentsDeleted](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/tableofcontentsdeleted-event/llms-full.txt) | [TableOfContentsEventArgs.TableOfContents](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/tableofcontentseventargs/tableofcontents-property/llms-full.txt) | When a table of contents has been created or deleted. After deletion, `ID`, `Name`, the structure levels, `HasLinks`, `HasPageNumbers`, `HasRightAlignedPageNumbers` and the highlight settings are valid |
| Comments | [CommentCreated](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/commentcreated-event/llms-full.txt), [CommentDeleted](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/commentdeleted-event/llms-full.txt) | [CommentEventArgs.CommentedText](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/commenteventargs/commentedtext-property/llms-full.txt) | When text has been commented or a comment has been removed. After deletion, `Comment`, `UserName`, `CreationTime`, `ID`, `HighlightColor` and `HighlightMode` are valid |
| Footnotes | [FootnoteCreated](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/footnotecreated-event/llms-full.txt), [FootnoteDeleted](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/footnotedeleted-event/llms-full.txt) | [FootnoteEventArgs.Footnote](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/footnoteeventargs/footnote-property/llms-full.txt) | When a footnote has been created or deleted. After deletion, `ID`, `Name`, `HighlightColor` and `HighlightMode` are valid |

The pages of the elements describe how to work with them, for example [Tables](https://docs.textcontrol.com/tx-text-control-dotnet-server/document-processing/tables/llms-full.txt), [Track Changes](https://docs.textcontrol.com/tx-text-control-dotnet-server/document-processing/track-changes/llms-full.txt) and [Comments](https://docs.textcontrol.com/tx-text-control-dotnet-server/document-processing/comments/llms-full.txt).

### Font, Proofing and XML Events

| Event | Occurs | Arguments |
|---|---|---|
| [AdaptFont](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/adaptfont-event/llms-full.txt) | For each font that must be replaced because it isn't supported. Only when `FontSettings.AdaptFontEvent` is `true` | [AdaptFontEventArgs](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/adaptfonteventargs/llms-full.txt) |
| [SpellCheckText](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/spellchecktext-event/llms-full.txt) | When text has changed and must be checked, if spell checking is enabled and no spell checking component is connected | [SpellCheckTextEventArgs](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/spellchecktexteventargs/llms-full.txt) |
| [HyphenateWord](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/hyphenateword-event/llms-full.txt) | When a word doesn't fit on its line and must be hyphenated, if `IsHyphenationEnabled` is `true` | [HyphenateWordEventArgs](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/hyphenatewordeventargs/llms-full.txt) |
| [XmlInvalid](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/xmlinvalid-event/llms-full.txt) | When a loaded XML document can't be validated with its document type definition (DTD); the document is still loaded | [XmlErrorEventArgs](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/xmlerroreventargs/llms-full.txt) |
| [XmlNotWellFormed](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/xmlnotwellformed-event/llms-full.txt) | When a loaded XML document isn't well-formed; the document isn't loaded | `XmlErrorEventArgs` |

[XML Documents](https://docs.textcontrol.com/tx-text-control-dotnet-server/document-processing/xml/llms-full.txt) shows how to load XML files with their DTD and handle both events.

- **AdaptFont.** A font must be replaced when a loaded document uses a font that isn't available, when another printer is set with `FormattingPrinter` or when [FontSettings](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/fontsettings-property/llms-full.txt) restricts the fonts with `EmbeddableFontsOnly` or `TrueTypeFontsOnly`. [FontName](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/adaptfonteventargs/fontname-property/llms-full.txt) is the missing font and [AdaptedFontName](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/adaptfonteventargs/adaptedfontname-property/llms-full.txt) the font that replaces it. Your handler can set another replacement, which must be one of the fonts in [SupportedFonts](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/adaptfonteventargs/supportedfonts-property/llms-full.txt). [Creating Documents](https://docs.textcontrol.com/tx-text-control-dotnet-server/document-processing/creating/#make-fonts-available-on-the-server) shows the event in use.
- **SpellCheckText and HyphenateWord** are described in [Spell Checking and Hyphenation](https://docs.textcontrol.com/tx-text-control-dotnet-server/document-processing/spell-checking/llms-full.txt).
- **XML errors.** `XmlErrorEventArgs` contains the [Reason](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/xmlerroreventargs/reason-property/llms-full.txt) of the error and its position: [LineNumber](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/xmlerroreventargs/linenumber-property/llms-full.txt), [LinePosition](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/xmlerroreventargs/lineposition-property/llms-full.txt) and [FilePosition](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/xmlerroreventargs/fileposition-property/llms-full.txt), each 0 when the information isn't available.

### Collect the Elements of a Loaded Document

Created events give you an inventory of a document while it's loaded. The following program counts the tables without an ID, the images, the text frames and the tracked changes of *Documents/sample.docx* and lists the fonts that were replaced:

```csharp
using TXTextControl;

int tablesWithoutId = 0;
int images = 0;
int textFrames = 0;
int trackedChanges = 0;
List<string> replacedFonts = new List<string>();

using (ServerTextControl tx = new ServerTextControl())
{
    tx.Create();

    // Attach the handlers before the document is loaded
    tx.TableCreated += (sender, e) => tablesWithoutId++;
    tx.ImageCreated += (sender, e) => images++;
    tx.TextFrameCreated += (sender, e) => textFrames++;
    tx.TrackedChangeCreated += (sender, e) => trackedChanges++;

    tx.FontSettings.AdaptFontEvent = true;
    tx.AdaptFont += (sender, e) => replacedFonts.Add($"{e.FontName} replaced with {e.AdaptedFontName}");

    tx.DocumentLoaded += (sender, e) => Console.WriteLine("Document loaded");

    tx.Load("Documents/sample.docx", StreamType.WordprocessingML);

    Console.WriteLine($"Tables without an ID: {tablesWithoutId}");
    Console.WriteLine($"Images: {images}");
    Console.WriteLine($"Text frames: {textFrames}");
    Console.WriteLine($"Tracked changes: {trackedChanges}");

    foreach (string font in replacedFonts)
    {
        Console.WriteLine(font);
    }
}
```

The handlers count the elements while `Load` runs, so the counters are complete when `Load` returns. A handler can also work with the element it receives, for example the cells of `e.Table` in `TableCreated`, as the blog article [Import and Manipulate Excel Spreadsheets by Converting Cells into Merge Fields in C#](https://www.textcontrol.com/blog/2023/08/08/import-and-manipulate-excel-spreadsheets-by-converting-cells-into-merge-fields/) does when it loads a spreadsheet.

### React to Removed Elements

Deleted events tell you what your own code removed. The following program accepts all tracked changes of a document and logs each accepted change from the `TrackedChangeDeleted` event:

```csharp
using TXTextControl;

using (ServerTextControl tx = new ServerTextControl())
{
    tx.Create();

    // Only ChangeKind, UserName, ChangeTime and the highlight settings are valid here
    tx.TrackedChangeDeleted += (sender, e) =>
        Console.WriteLine($"Accepted: {e.TrackedChange.ChangeKind} by {e.TrackedChange.UserName} ({e.TrackedChange.ChangeTime:u})");

    tx.Load("Documents/revised.docx", StreamType.WordprocessingML);

    while (tx.TrackedChanges.Count > 0)
    {
        if (!tx.TrackedChanges.Remove(tx.TrackedChanges[1], true))
        {
            break;
        }
    }

    tx.Save("accepted.docx", StreamType.WordprocessingML);
}
```

`TrackedChangeDeleted` occurs when a change is accepted or rejected with [TrackedChangeCollection.Remove](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/trackedchangecollection/remove-method/llms-full.txt). The handler reads only the properties that are valid for a removed change.

### The On Methods

For most events, `ServerTextControl` has a protected method that raises it, named after the event with the prefix `On`, such as [OnTableCreated](https://docs.textcontrol.com/tx-text-control-dotnet-server/reference/txtextcontrol/servertextcontrol/ontablecreated-method/llms-full.txt) for `TableCreated`. Each takes the event arguments of its event. The reference lists them with the members of `ServerTextControl`.

### Related Pages

- [Loading Documents](https://docs.textcontrol.com/tx-text-control-dotnet-server/document-processing/loading/llms-full.txt): load the documents whose elements the events report.
- [Track Changes](https://docs.textcontrol.com/tx-text-control-dotnet-server/document-processing/track-changes/llms-full.txt): accept and reject the changes of a document.
- [Overview](https://docs.textcontrol.com/tx-text-control-dotnet-server/mail-merge/overview/#follow-the-merge-with-events) of Mail Merge and Reporting: the events of `MailMerge`.

---

## Nearby

- **Previous:** [Printing](https://docs.textcontrol.com/tx-text-control-dotnet-server/document-processing/printing/llms-full.txt)
- **Next:** [Conditional Instructions](https://docs.textcontrol.com/tx-text-control-dotnet-server/document-processing/conditional-instructions/llms-full.txt)
