# Getting the Nearest DocumentTarget at a Specific Location

> The TextCharCollection.GetItem method in TX Text Control returns the nearest character at a given screen location. This C# workaround extends similar nearest-item lookup behavior to DocumentTargets by iterating all targets and returning the one closest to the input position.

- **Author:** Bjoern Meyer
- **Published:** 2012-02-14
- **Modified:** 2026-07-17
- **Description:** The TextCharCollection.GetItem method in TX Text Control returns the nearest character at a given screen location. This C# workaround extends similar nearest-item lookup behavior to DocumentTargets by iterating all targets and returning the one closest to the input position.
- **1 min read** (153 words)
- **Tags:**
  - Sample
- **Web URL:** https://www.textcontrol.com/blog/2012/02/14/getting-the-nearest-documenttarget-at-a-specific-location/
- **LLMs URL:** https://www.textcontrol.com/blog/2012/02/14/getting-the-nearest-documenttarget-at-a-specific-location/llms.txt
- **LLMs-Full URL:** https://www.textcontrol.com/blog/2012/02/14/getting-the-nearest-documenttarget-at-a-specific-location/llms-full.txt

---

The [TextCharCollection.GetItem](https://docs.textcontrol.com/textcontrol/windows-forms/ref.txtextcontrol.textcharcollection.getitem.method.htm) method has an implementation that returns the nearest character of a given location. A TX Text Control user requested this for the [DocumentTargetCollection](https://docs.textcontrol.com/textcontrol/windows-forms/ref.txtextcontrol.documenttargetcollection.class.htm) as well. A method that returns the nearest [DocumentTarget](https://docs.textcontrol.com/textcontrol/windows-forms/ref.txtextcontrol.documenttarget.class.htm) at the current input position.

We added this smart request to our list of feature requests. But as always, we try to provide work-arounds for such tasks. TX Text Control's API is very flexible and generally, all calculations are doable based on the available interface.

The following function returns the nearest DocumentTarget for a specific position:

```
private DocumentTarget GetNearestTarget(int Start)
{
    DocumentTarget nearestTarget = null;

    foreach (DocumentTarget target in textControl1.DocumentTargets)
    {
        if (nearestTarget == null)
        {
            nearestTarget = target;
            continue;
        }

        if (System.Math.Abs((target.Start - Start))
                <= System.Math.Abs((nearestTarget.Start - Start)))
            nearestTarget = target;
    }

    return nearestTarget;
}
```

The function is pretty straightforward: All targets are iterated and the distance between the input position and the target start position is compared. The target with the shortest distance is returned.

---

## 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)
