# MeasureString for Text in TextControl

> TX Text Control uses its own WYSIWYG rendering tied to a printer driver, so GDI+ MeasureString does not apply. A ServerTextControl instance can replicate Selection properties and compute exact text width in twips by reading the TextChar bounds of the first and last characters.

- **Author:** Bjoern Meyer
- **Published:** 2012-08-23
- **Modified:** 2026-07-17
- **Description:** TX Text Control uses its own WYSIWYG rendering tied to a printer driver, so GDI+ MeasureString does not apply. A ServerTextControl instance can replicate Selection properties and compute exact text width in twips by reading the TextChar bounds of the first and last characters.
- **2 min read** (339 words)
- **Tags:**
  - Sample
- **Web URL:** https://www.textcontrol.com/blog/2012/08/23/measurestring-for-text-in-textcontrol/
- **LLMs URL:** https://www.textcontrol.com/blog/2012/08/23/measurestring-for-text-in-textcontrol/llms.txt
- **LLMs-Full URL:** https://www.textcontrol.com/blog/2012/08/23/measurestring-for-text-in-textcontrol/llms-full.txt

---

![TX Text Control X8](https://s1-www.textcontrol.com/assets/dist/blog/2012/08/23/a/assets/x8.webp "TX Text Control X8")In various applications, it might be neccessary to estimate whether a string with a specific font and size would fit into a fixed space like a table cell. In GDI+, you can use [MeasureString](http://msdn.microsoft.com/en-us/library/system.drawing.graphics.measurestring.aspx) to measure a specified string when drawn with a specified Font.

In TX Text Control, this is different. TX Text Control has it's own text rendering based on many different factors including a printer driver. This rendering is known as WYSIWYG and makes a rich edit control a good and usable control.

But how to get the extension of a string without adding the text to the TextControl instance?

[Since version X8](https://www.textcontrol.com/blog/2012/08/10/servertextcontrol-and-documentserver-available-in-client-applications/llms-full.txt), the non-visible ServerTextControl can be used in Windows Forms and WPF applications as well. This component can be used to get the length of a text. The following simple function shows how to do that:

```
///<summary>
///Returns the length of a specific string in Twips.
///</summary>
public int MeasureTextControlString(Selection Selection, string FormattingPrinter)
{
    int iLength;

    using (ServerTextControl tx = new ServerTextControl())
    {
        tx.Create();
        tx.PageSize.Width = 10000;
        tx.FormattingPrinter = FormattingPrinter;

        foreach (PropertyInfo property in Selection.GetType().GetProperties())
        {
            if (property.GetValue(Selection, null).ToString() == "")
                continue;

            property.SetValue(tx.Selection,
                property.GetValue(Selection, null), null);
        }

        tx.SelectAll();

        return iLength = tx.TextChars[tx.Selection.Length].Bounds.Right -
                tx.TextChars[tx.Selection.Start + 1].Bounds.Left;
    }
}
```

It is pretty straightforward. A Selection object is copied and applied to the new ServerTextControl instance. The width of the text is calculated using the TextChar bounds of the first and last character in the Selection. The following code shows how to call this function with a new Selection object:

```
Selection newSelection = new Selection();
newSelection.Text = "Hello dWorld";
newSelection.FontSize = 600;
newSelection.FontName = "Wingdings";

int length = MeasureTextControlString(newSelection, textControl1.FormattingPrinter);
```

You can specify different properties in the Selection object that are used to calculate the exact width.

---

## About Bjoern Meyer

As CEO, Bjoern is the visionary behind our strategic direction and business development, bridging the gap between our customers and engineering teams. His deep passion for coding and web technologies drives the creation of innovative products. If you're at a tech conference, be sure to stop by our booth - you'll most likely meet Bjoern in person. With an advanced graduate degree (Dipl. Inf.) in Computer Science, specializing in AI, from the University of Bremen, Bjoern brings significant expertise to his role. In his spare time, Bjoern enjoys running, paragliding, mountain biking, and playing the piano.

- [LinkedIn](https://www.linkedin.com/in/bjoernmeyer/)
- [X](https://x.com/txbjoern)
- [GitHub](https://github.com/bjoerntx)

---

## Related Posts

- [Create a Table of Contents in Windows Forms using C#](https://www.textcontrol.com/blog/2023/01/23/create-toc-in-windows-forms/llms.txt)
- [Official TX Text Control .NET Sample Applications Are Now Hosted on GitHub](https://www.textcontrol.com/blog/2023/01/08/official-tx-text-control-net-sample-applications-are-now-hosted-on-github/llms.txt)
- [Detect Toggle Button Changes Using a MutationObserver](https://www.textcontrol.com/blog/2021/11/11/detect-toggle-button-changes-using-a-mutationobserver/llms.txt)
- [Two Ways to Restart Numbered Lists in TX Text Control](https://www.textcontrol.com/blog/2021/11/03/two-ways-to-restart-numbered-lists/llms.txt)
- [Zoom Tricks: Disabling CTRL + MOUSE WHEEL and More](https://www.textcontrol.com/blog/2020/12/09/zoom-tricks-disabling-ctrl-mouse-wheel-and-more/llms.txt)
- [AutoCorrect Using TX Text Control and TX Spell .NET](https://www.textcontrol.com/blog/2017/08/17/autocorrect-using-tx-text-control-and-tx-spell-net/llms.txt)
- [Creating Conference Badges with Text Control Reporting](https://www.textcontrol.com/blog/2017/02/14/creating-conference-badges-with-text-control-reporting/llms.txt)
- [Using Custom Document Properties to Store Additional Document Information](https://www.textcontrol.com/blog/2017/02/09/using-custom-document-properties-to-store-additional-document-information/llms.txt)
- [Use SubTextParts to Protect Document Parts](https://www.textcontrol.com/blog/2015/12/29/use-subtextparts-to-protect-document-parts/llms.txt)
- [Reporting: Styling the DocumentViewer for ASP.NET](https://www.textcontrol.com/blog/2015/06/14/reporting-styling-the-documentviewer-for-aspnet/llms.txt)
- [Reporting: Merging MS Word Documents with DocVariables](https://www.textcontrol.com/blog/2015/06/10/reporting-merging-ms-word-documents-with-docvariables/llms.txt)
- [TextControl.Web: Determine when a Document Has Been Completely Loaded](https://www.textcontrol.com/blog/2015/06/09/textcontrolweb-determine-when-a-document-has-been-completely-loaded/llms.txt)
- [TextControl.Web: Adding Custom Ribbon Tabs](https://www.textcontrol.com/blog/2015/05/29/textcontrolweb-adding-custom-ribbon-tabs/llms.txt)
- [Building a Touch-enabled Button Bar with Javascript](https://www.textcontrol.com/blog/2015/05/27/building-a-touch-enabled-button-bar-with-javascript/llms.txt)
- [TextControl.Web: Inserting Merge Fields Using Javascript](https://www.textcontrol.com/blog/2015/05/16/textcontrolweb-inserting-merge-fields-using-javascript/llms.txt)
- [MailMerge: Merge Hyperlinks into Merge Fields](https://www.textcontrol.com/blog/2015/05/15/mailmerge-merge-hyperlinks-into-merge-fields/llms.txt)
- [Mail Merge: Suppress Lines with Empty Merge Fields](https://www.textcontrol.com/blog/2014/08/01/mail-merge-suppress-lines-with-empty-merge-fields/llms.txt)
- [Interactive Spelling Suggestions Using TX Spell .NET](https://www.textcontrol.com/blog/2014/07/30/interactive-spelling-suggestions-using-tx-spell-net/llms.txt)
- [Alternate Row Colors Using NEXT Fields](https://www.textcontrol.com/blog/2013/12/30/alternate-row-colors-using-next-fields/llms.txt)
- [Loading Dictionaries Dynamically in TX Spell .NET](https://www.textcontrol.com/blog/2013/12/20/loading-dictionaries-dynamically-in-tx-spell-net/llms.txt)
- [Restart the Page Numbering Fields Per Section](https://www.textcontrol.com/blog/2013/11/08/restart-the-page-numbering-fields-per-section/llms.txt)
- [TX Barcode .NET: Test the Barcode Engine Live!](https://www.textcontrol.com/blog/2013/07/10/tx-barcode-net-test-the-barcode-engine-live/llms.txt)
- [SD Times .NET Component Buyers Guide 2013: Simplify Report Creation](https://www.textcontrol.com/blog/2013/06/06/sd-times-net-component-buyers-guide-2013-simplify-report-creation/llms.txt)
- [Inserting MS Word Compatible Page Number Fields](https://www.textcontrol.com/blog/2013/05/30/inserting-ms-word-compatible-page-number-fields/llms.txt)
- [MailMerge: Creating Shipping Labels Using TX Text Control](https://www.textcontrol.com/blog/2012/11/23/mailmerge-creating-shipping-labels-using-tx-text-control/llms.txt)
