PrintDocument.PrintPage 事件
当需要为当前页打印的输出时发生。
**命名空间:**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
public event PrintPageEventHandler PrintPage
public:
event PrintPageEventHandler^ PrintPage {
void add (PrintPageEventHandler^ value);
void remove (PrintPageEventHandler^ value);
}
/** @event */
public void add_PrintPage (PrintPageEventHandler value)
/** @event */
public void remove_PrintPage (PrintPageEventHandler value)
JScript 支持使用事件,但不支持进行新的声明。
备注
若要指定要打印的输出,请使用 PrintPageEventArgs 中包含的 Graphics。例如,若要指定应打印的一行文本,请使用 System.Drawing.Graphics.DrawString 方法描述该文本。
除了指定输出之外,还可以通过将 PrintPageEventArgs.HasMorePages 属性设置为 true 来指示是否还有更多的页要打印。默认值为 false,表示没有更多要打印的页。还可以通过 PageSettings 来修改单独的页设置,通过将 PrintPageEventArgs.Cancel 属性设置为 true 来取消打印作业。若要使用不同的页设置打印文档的每一页,请处理 QueryPageSettings 事件。
若要使事件与事件处理程序相关联,请将 PrintPageEventHandler 委托的一个实例添加到事件。一旦发生该事件,将调用此事件处理程序。有关用委托处理事件的更多信息,请参见 事件和委托。
示例
下面的代码示例演示如何处理 PrintPage 事件。
在此示例中使用 System.Drawing、System.Drawing.Printing 和 System.IO 命名空间。
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 Not (line Is 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
public class PrintingExample : System.Windows.Forms.Form
{
private System.ComponentModel.Container components;
private System.Windows.Forms.Button printButton;
private Font printFont;
private StreamReader streamToPrint;
public PrintingExample() : base()
{
// The Windows Forms Designer requires the following call.
InitializeComponent();
}
// The Click event is raised when the user clicks the Print button.
private void printButton_Click(object sender, EventArgs e)
{
try
{
streamToPrint = new StreamReader
("C:\\My Documents\\MyFile.txt");
try
{
printFont = new Font("Arial", 10);
PrintDocument pd = new PrintDocument();
pd.PrintPage += new PrintPageEventHandler
(this.pd_PrintPage);
pd.Print();
}
finally
{
streamToPrint.Close();
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
// The PrintPage event is raised for each page to be printed.
private void pd_PrintPage(object sender, PrintPageEventArgs ev)
{
float linesPerPage = 0;
float yPos = 0;
int count = 0;
float leftMargin = ev.MarginBounds.Left;
float topMargin = ev.MarginBounds.Top;
string line = null;
// 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()) != null))
{
yPos = topMargin + (count *
printFont.GetHeight(ev.Graphics));
ev.Graphics.DrawString(line, printFont, Brushes.Black,
leftMargin, yPos, new StringFormat());
count++;
}
// If more lines exist, print another page.
if(line != null)
ev.HasMorePages = true;
else
ev.HasMorePages = false;
}
// The Windows Forms Designer requires the following procedure.
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.printButton = new System.Windows.Forms.Button();
this.ClientSize = new System.Drawing.Size(504, 381);
this.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);
printButton.Click += new System.EventHandler(printButton_Click);
this.Controls.Add(printButton);
}
// This is the main entry point for the application.
public static void Main(string[] args)
{
Application.Run(new PrintingExample());
}
}
public ref class PrintingExample: public System::Windows::Forms::Form
{
private:
System::ComponentModel::Container^ components;
System::Windows::Forms::Button^ printButton;
System::Drawing::Font^ printFont;
StreamReader^ streamToPrint;
public:
PrintingExample()
: Form()
{
// The Windows Forms Designer requires the following call.
InitializeComponent();
}
private:
// The Click event is raised when the user clicks the Print button.
void printButton_Click( Object^ /*sender*/, EventArgs^ /*e*/ )
{
try
{
streamToPrint = gcnew StreamReader( "C:\\My Documents\\MyFile.txt" );
try
{
printFont = gcnew System::Drawing::Font( "Arial",10 );
PrintDocument^ pd = gcnew PrintDocument;
pd->PrintPage += gcnew PrintPageEventHandler( this, &PrintingExample::pd_PrintPage );
pd->Print();
}
finally
{
streamToPrint->Close();
}
}
catch ( Exception^ ex )
{
MessageBox::Show( ex->Message );
}
}
// The PrintPage event is raised for each page to be printed.
void pd_PrintPage( Object^ /*sender*/, PrintPageEventArgs^ ev )
{
float linesPerPage = 0;
float yPos = 0;
int count = 0;
float leftMargin = (float)ev->MarginBounds.Left;
float topMargin = (float)ev->MarginBounds.Top;
String^ line = nullptr;
// 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()) != nullptr) )
{
yPos = topMargin + (count * printFont->GetHeight( ev->Graphics ));
ev->Graphics->DrawString( line, printFont, Brushes::Black, leftMargin, yPos, gcnew StringFormat );
count++;
}
// If more lines exist, print another page.
if ( line != nullptr )
ev->HasMorePages = true;
else
ev->HasMorePages = false;
}
// The Windows Forms Designer requires the following procedure.
void InitializeComponent()
{
this->components = gcnew System::ComponentModel::Container;
this->printButton = gcnew System::Windows::Forms::Button;
this->ClientSize = System::Drawing::Size( 504, 381 );
this->Text = "Print Example";
printButton->ImageAlign = System::Drawing::ContentAlignment::MiddleLeft;
printButton->Location = System::Drawing::Point( 32, 110 );
printButton->FlatStyle = System::Windows::Forms::FlatStyle::Flat;
printButton->TabIndex = 0;
printButton->Text = "Print the file.";
printButton->Size = System::Drawing::Size( 136, 40 );
printButton->Click += gcnew System::EventHandler( this, &PrintingExample::printButton_Click );
this->Controls->Add( printButton );
}
};
// This is the main entry point for the application.
int main()
{
Application::Run( gcnew PrintingExample );
}
public class PrintingExample extends System.Windows.Forms.Form
{
private System.ComponentModel.Container components;
private System.Windows.Forms.Button printButton;
private Font printFont;
private StreamReader streamToPrint;
public PrintingExample()
{
// The Windows Forms Designer requires the following call.
InitializeComponent();
} //PrintingExample
// The Click event is raised when the user clicks the Print button.
private void printButton_Click(Object sender, EventArgs e)
{
try {
streamToPrint = new StreamReader("C:\\My Documents\\MyFile.txt");
try {
printFont = new Font("Arial", 10);
PrintDocument pd = new PrintDocument();
pd.add_PrintPage(new PrintPageEventHandler(this.pd_PrintPage));
pd.Print();
}
finally {
streamToPrint.Close();
}
}
catch (System.Exception ex) {
MessageBox.Show(ex.get_Message());
}
} //printButton_Click
// The PrintPage event is raised for each page to be printed.
private void pd_PrintPage(Object sender, PrintPageEventArgs ev)
{
float linesPerPage = 0;
float yPos = 0;
int count = 0;
float leftMargin = ev.get_MarginBounds().get_Left();
float topMargin = ev.get_MarginBounds().get_Top();
String line = null;
// Calculate the number of lines per page.
linesPerPage = ev.get_MarginBounds().get_Height() /
printFont.GetHeight(ev.get_Graphics());
// Print each line of the file.
while ((count < linesPerPage &&
(line = streamToPrint.ReadLine()) != null)) {
yPos = topMargin + count * printFont.GetHeight(ev.get_Graphics());
ev.get_Graphics().DrawString(line, printFont, Brushes.get_Black(),
leftMargin, yPos, new StringFormat());
count++;
}
// If more lines exist, print another page.
if (line != null) {
ev.set_HasMorePages(true);
}
else {
ev.set_HasMorePages(false);
}
} //pd_PrintPage
// The Windows Forms Designer requires the following procedure.
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.printButton = new System.Windows.Forms.Button();
this.set_ClientSize(new System.Drawing.Size(504, 381));
this.set_Text("Print Example");
printButton.set_ImageAlign(System.Drawing.ContentAlignment.MiddleLeft);
printButton.set_Location(new System.Drawing.Point(32, 110));
printButton.set_FlatStyle(System.Windows.Forms.FlatStyle.Flat);
printButton.set_TabIndex(0);
printButton.set_Text("Print the file.");
printButton.set_Size(new System.Drawing.Size(136, 40));
printButton.add_Click(new System.EventHandler(printButton_Click));
this.get_Controls().Add(printButton);
} //InitializeComponent
// This is the main entry point for the application.
public static void main(String[] args)
{
Application.Run(new PrintingExample());
} //main
} //PrintingExample
平台
Windows 98、Windows 2000 SP4、Windows Millennium Edition、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition
.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求。
版本信息
.NET Framework
受以下版本支持:2.0、1.1、1.0
请参见
参考
PrintDocument 类
PrintDocument 成员
System.Drawing.Printing 命名空间
PrintPageEventHandler
PrintPageEventArgs
PrintDocument.BeginPrint 事件
PrintDocument.EndPrint 事件
QueryPageSettings
Graphics 类