# Getting the Page Number at the Current Scroll Location

> The InputPosition.Page property returns the page number at the cursor location but does not update during scrolling in TX Text Control. This code sample uses LineCollection.GetItem with the control midpoint coordinates to retrieve the visible page and updates via VScroll.

- **Author:** Bjoern Meyer
- **Published:** 2011-03-03
- **Modified:** 2026-03-05
- **Description:** The InputPosition.Page property returns the page number at the cursor location but does not update during scrolling in TX Text Control. This code sample uses LineCollection.GetItem with the control midpoint coordinates to retrieve the visible page and updates via VScroll.
- **2 min read** (282 words)
- **Tags:**
  - Sample
- **Web URL:** https://www.textcontrol.com/blog/2011/03/03/getting-the-page-number-at-the-current-scroll-location/
- **LLMs URL:** https://www.textcontrol.com/blog/2011/03/03/getting-the-page-number-at-the-current-scroll-location/llms.txt
- **LLMs-Full URL:** https://www.textcontrol.com/blog/2011/03/03/getting-the-page-number-at-the-current-scroll-location/llms-full.txt

---

When using TX Text Control in read-only mode, it might be required to display the page number of the currently visible page. In order to get the page number at the current input position, you just need to get the appropriate property from the [InputPosition](https://docs.textcontrol.com/textcontrol/windows-forms/ref.txtextcontrol.inputposition.class.htm) object.

But when scrolling through the pages, the actual input position is not changed, so that this property can't be used to get the page number. But thanks to the flexible and powerful class library, it is very easy to retrieve the page number of the currently visible page.

In order to get the page number, we use the [LineCollection](https://docs.textcontrol.com/textcontrol/windows-forms/ref.txtextcontrol.linecollection.class.htm) to get the line in the middle of the visible TextControl. TX Text Control automatically factors the current scroll location into the calculation, so that we just need to pass the half of the control size to the [GetItem](https://docs.textcontrol.com/textcontrol/windows-forms/ref.txtextcontrol.linecollection.getitem.method.htm) method. It returns the [Line](https://docs.textcontrol.com/textcontrol/windows-forms/ref.txtextcontrol.line.class.htm) object in the middle of the visible document part. And the *Line* object provides the according page number among other information.

```
private int GetPageAtScrollPosition()
{
    return textControl1.Lines.GetItem(
        new Point(0, textControl1.Height / 2)).Page;
}
```

We just need to update the information using the [VScroll](https://docs.textcontrol.com/textcontrol/windows-forms/ref.txtextcontrol.textcontrol.onvscroll.method.htm) event:

```
private void textControl1_VScroll(object sender, EventArgs e)
{
    int iPageNumber = GetPageAtScrollPosition();

    Console.WriteLine("Page " +
        iPageNumber.ToString() +
        " of " +
        textControl1.Pages.ToString());

    Console.WriteLine("Section " +
        textControl1.GetPages()[iPageNumber].Section +
        " of " +
        textControl1.Sections.Count.ToString());
}
```

---

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