To format a RichTextBox control into pages in a WinForms application using C#, you can make use of the PrintDocument class and its associated events. Here’s an example of how you can achieve this:

  1. Add a PrintDocument control to your form. You can do this by dragging and dropping the control from the toolbox onto your form.
  2. Handle the PrintPage event of the PrintDocument control. This event is raised each time a page needs to be printed. In the event handler, you can determine the content to be printed on each page.
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    // Get the text to print from the RichTextBox control
    string text = richTextBox1.Text;

    // Define the font and margins for the printed page
    Font font = new Font("Arial", 12);
    int margin = 50;

    // Calculate the area where text can be printed
    RectangleF printableArea = new RectangleF(e.MarginBounds.Left, e.MarginBounds.Top, e.MarginBounds.Width, e.MarginBounds.Height);

    // Use MeasureString to determine how much text can be printed on each page
    SizeF textSize = e.Graphics.MeasureString(text, font, printableArea.Width);

    // Calculate the number of lines that can fit on the page
    int linesPerPage = (int)(printableArea.Height / font.GetHeight(e.Graphics));

    // Calculate the number of characters that can fit on each line
    int charsPerLine = (int)(printableArea.Width / font.SizeInPoints);

    // Calculate the number of characters to print on this page
    int charactersToPrint = linesPerPage * charsPerLine;

    // Adjust the number of characters to print if it exceeds the remaining text length
    if (charactersToPrint > text.Length)
        charactersToPrint = text.Length;

    // Create a substring containing the text to be printed on this page
    string pageText = text.Substring(0, charactersToPrint);

    // Remove the printed text from the original text
    text = text.Remove(0, charactersToPrint);

    // Draw the text on the page
    e.Graphics.DrawString(pageText, font, Brushes.Black, printableArea);

    // Check if there are more pages to print
    e.HasMorePages = text.Length > 0;
}

Create a button or any other trigger to initiate the printing process. In the click event handler for the button, you can call the Print method of the PrintDocument control.

private void printButton_Click(object sender, EventArgs e)
{
    PrintDialog printDialog = new PrintDialog();
    if (printDialog.ShowDialog() == DialogResult.OK)
    {
        printDocument1.Print();
    }
}

When you run the application and click the “Print” button, it will display the print dialog where you can select the printer and other printing options. Once you confirm the print settings, the PrintPage event will be triggered, and the text from the RichTextBox will be split into pages and printed accordingly.

Please note that this is a basic example and you may need to modify it further to handle more complex formatting requirements, such as page headers, footers, and page numbering.