PrintDocument.PrintPage 事件
.NET Framework 3.5
更新:2007 年 11 月
当需要为当前页打印的输出时发生。
命名空间: System.Drawing.Printing
程序集: System.Drawing(在 System.Drawing.dll 中)
声明 Public Event PrintPage As PrintPageEventHandler 用法 Dim instance As PrintDocument Dim handler As PrintPageEventHandler AddHandler instance.PrintPage, handler
J#
/** @event */ public void add_PrintPage (PrintPageEventHandler value) /** @event */ public void remove_PrintPage (PrintPageEventHandler value)
JScript
JScript 不支持事件。
若要指定要打印的输出,请使用 PrintPageEventArgs 中包含的Graphics。例如,若要指定应打印的一行文本,请使用Graphics.DrawString 方法描述该文本。
除了指定输出之外,还可以通过将 PrintPageEventArgs.HasMorePages 属性设置为true 来指示是否还有更多的页要打印。默认值为 false,表示没有更多要打印的页。还可以通过 PageSettings 来修改单独的页设置,通过将PrintPageEventArgs.Cancel 属性设置为true 来取消打印作业。若要使用不同的页设置打印文档的每一页,请处理QueryPageSettings 事件。
若要使事件与事件处理程序相关联,请将 PrintPageEventHandler 委托的一个实例添加到事件。一旦发生该事件,将调用此事件处理程序。有关用委托处理事件的更多信息,请参见事件和委托。
下面的代码示例演示如何处理 PrintPage 事件。
在此示例中使用 System.Drawing、System.Drawing.Printing 和 System.IO 命名空间。
Imports System Imports System.IO Imports System.Drawing Imports System.Drawing.Printing Imports System.Windows.Forms Public Class PrintingExample Inherits System.Windows.Forms.Form Private components As System.ComponentModel.Container Private printButton As System.Windows.Forms.Button Private printFont As Font Private streamToPrint As StreamReader Public Sub New() ' The Windows Forms Designer requires the following call. InitializeComponent() End Sub ' The Click event is raised when the user clicks the Print button. Private Sub printButton_Click(sender As Object, e As EventArgs) Try streamToPrint = New StreamReader("C:\My Documents\MyFile.txt") Try printFont = New Font("Arial", 10) Dim pd As New PrintDocument() AddHandler pd.PrintPage, AddressOf Me.pd_PrintPage pd.Print() Finally streamToPrint.Close() End Try Catch ex As Exception MessageBox.Show(ex.Message) End Try End Sub ' The PrintPage event is raised for each page to be printed. Private Sub pd_PrintPage(sender As Object, ev As PrintPageEventArgs) Dim linesPerPage As Single = 0 Dim yPos As Single = 0 Dim count As Integer = 0 Dim leftMargin As Single = ev.MarginBounds.Left Dim topMargin As Single = ev.MarginBounds.Top Dim line As String = Nothing ' Calculate the number of lines per page. linesPerPage = ev.MarginBounds.Height / printFont.GetHeight(ev.Graphics) ' Print each line of the file. While count < linesPerPage line = streamToPrint.ReadLine() If line Is Nothing Then Exit While End If yPos = topMargin + count * printFont.GetHeight(ev.Graphics) ev.Graphics.DrawString(line, printFont, Brushes.Black, leftMargin, yPos, New StringFormat()) count += 1 End While ' If more lines exist, print another page. If (line IsNot Nothing) Then ev.HasMorePages = True Else ev.HasMorePages = False End If End Sub ' The Windows Forms Designer requires the following procedure. Private Sub InitializeComponent() Me.components = New System.ComponentModel.Container() Me.printButton = New System.Windows.Forms.Button() Me.ClientSize = New System.Drawing.Size(504, 381) Me.Text = "Print Example" printButton.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft printButton.Location = New System.Drawing.Point(32, 110) printButton.FlatStyle = System.Windows.Forms.FlatStyle.Flat printButton.TabIndex = 0 printButton.Text = "Print the file." printButton.Size = New System.Drawing.Size(136, 40) AddHandler printButton.Click, AddressOf printButton_Click Me.Controls.Add(printButton) End Sub ' This is the main entry point for the application. Public Shared Sub Main() Application.Run(New PrintingExample()) End Sub End Class