打印——备用

PrintDocument.PrintPage 事件

更新:2007 年 11 月

当需要为当前页打印的输出时发生。

命名空间: System.Drawing.Printing
程序集: System.Drawing(在 System.Drawing.dll 中)

C#
C++
VB
声明
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.DrawingSystem.Drawing.PrintingSystem.IO 命名空间。

C#
C++
VB
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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值