Subclass PrintDocument : Print PrintDocument « GUI Windows Forms « C# / CSharp Tutorial






using System;
using System.Drawing;
using System.Windows.Forms;
using System.Drawing.Printing;

public class PrintDocumentSubClass : Form
{
    public PrintDocumentSubClass()
    {
        this.cmdPrint = new System.Windows.Forms.Button();
        this.SuspendLayout();
        // 
        this.cmdPrint.Location = new System.Drawing.Point(109, 122);
        this.cmdPrint.Size = new System.Drawing.Size(75, 23);
        this.cmdPrint.Text = "Print";
        this.cmdPrint.UseVisualStyleBackColor = true;
        this.cmdPrint.Click += new System.EventHandler(this.cmdPrint_Click);
        // 
        this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
        this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
        this.ClientSize = new System.Drawing.Size(278, 259);
        this.Controls.Add(this.cmdPrint);
        this.Text = "Multi Page Print";
        this.ResumeLayout(false);
    }

    private void cmdPrint_Click(object sender, EventArgs e)
    {
        PrintDocument doc = new TextDocument();
        doc.PrintPage += this.Doc_PrintPage;

        PrintDialog dlgSettings = new PrintDialog();
        dlgSettings.Document = doc;

        if (dlgSettings.ShowDialog() == DialogResult.OK)
        {
            doc.Print();
        }
    }

    private void Doc_PrintPage(object sender, PrintPageEventArgs e)
    {
        TextDocument doc = (TextDocument)sender;

        Font font = new Font("Arial", 10);
        
        float lineHeight = font.GetHeight(e.Graphics);

        float x = e.MarginBounds.Left;
        float y = e.MarginBounds.Top;

        doc.PageNumber += 1;

        while ((y + lineHeight) < e.MarginBounds.Bottom && doc.Offset <= doc.Text.GetUpperBound(0))
        {
            e.Graphics.DrawString(doc.Text[doc.Offset], font,Brushes.Black, x, y);
            doc.Offset += 1;
            y += lineHeight;
        }

        if (doc.Offset < doc.Text.GetUpperBound(0))
        {
            e.HasMorePages = true;
        } else {
            doc.Offset = 0;
        }
        
    }
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new PrintDocumentSubClass());
    }
    private System.Windows.Forms.Button cmdPrint;
}

class TextDocument : PrintDocument{
    private string[] text;

    public string[] Text;

    public int PageNumber;

    public int Offset;
    

    public TextDocument()
    {
        this.Text = new string[100];
        for (int i = 0; i < 100; i++)
        {
            this.Text[i] += "string Text ";
        }
    }
}








23.51.Print PrintDocument
23.51.1.Basic Printing
23.51.2.Print BMP imagePrint BMP image
23.51.3.Multi Page Print
23.51.4.Subclass PrintDocument
23.51.5.Print a paragraph
23.51.6.The print preview application.
23.51.7.Print With Margins
23.51.8.Print PageSettings Metrics
23.51.9.PrintDocument: DocumentName, PrintPage, Print
23.51.10.The print process application.