Imports System.Drawing.Printing
Public Class Form1
Private Const MIN_PAGE_NUMBER As Integer = 1
Private Const MAX_PAGE_NUMBER As Integer = 10
Private pageNumber As Integer
Private copyNumber As Short
Private Sub Form1_Load(ByVal sender As Object, _
ByVal e As EventArgs) Handles MyBase.Load
With Me.PrintDocument1.PrinterSettings
.MinimumPage = MIN_PAGE_NUMBER
.MaximumPage = MAX_PAGE_NUMBER
.FromPage = MIN_PAGE_NUMBER
.ToPage = MAX_PAGE_NUMBER
End With
Me.PrintDialog1.AllowSomePages = True
End Sub
Private Sub Button1_Click(ByVal sender As Object, _
ByVal e As EventArgs) Handles Button1.Click
If Me.PrintDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
Me.PrintPreviewDialog1.ShowDialog()
End If
End Sub
Private Sub PrintDocument1_BeginPrint(ByVal sender As Object, _
ByVal e As PrintEventArgs) Handles PrintDocument1.BeginPrint
Me.pageNumber = 1
Me.copyNumber = 1
End Sub
Private Sub PrintDocument1_PrintPage(ByVal sender As Object, _
ByVal e As PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim settings As PrinterSettings = Me.PrintDocument1.PrinterSettings
If settings.PrintRange = PrintRange.SomePages Then
Do Until Me.pageNumber >= settings.FromPage
Me.pageNumber += 1
Loop
End If
e.Graphics.DrawString(String.Format("Copy {0}, Page {1}", _
Me.copyNumber, _
Me.pageNumber), _
Me.Font, _
Brushes.Black, _
e.MarginBounds.Location)
Me.pageNumber += 1
If (settings.PrintRange = PrintRange.AllPages AndAlso Me.pageNumber > MAX_PAGE_NUMBER) OrElse _
(settings.PrintRange = PrintRange.SomePages AndAlso Me.pageNumber > settings.ToPage) Then
Me.pageNumber = 1
Me.copyNumber += 1S
End If
e.HasMorePages = (Me.copyNumber <= settings.Copies)
End Sub
End Class