A PrintDocument osztálynak négy eseménye van. Nézzük sorra ezeket.
A BeginPrint esemény akkor jön létre, amikor a nyomtatási munka elkezdődik. Itt elvégezhetünk olyan tevékenységeket, mely a nyomtatás megkezdése előtt szükséges, mint például egy állomány megnyitása, melyet fel kell használnunk a nyomtatási munka elvégzéséhez. Az esemény "e" paraméterében kapunk egy Cancel property-t, melyet ha igazra állítunk, akkor ezzel megszakíthatjuk a nyomtatási munkát.
private void printDocument1_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e)
{
listBox1.Items.Add("BeginPrint");
listBox1.Update();
fs = new FileStream("a.dat", FileMode.Open);
}
A BeginPrint párja az EndPrint esemény, mely a nyomtatási munka befejeztével jön létre. Itt elvégezhetjük azokat a tennivalókat, melyekre a nyomtatás végeztével van szükségünk, mint például a megnyitott állomány lezárása.
private void printDocument1_EndPrint(object sender, System.Drawing.Printing.PrintEventArgs e)
{
listBox1.Items.Add("EndPrint");
listBox1.Update();
fs.Close();
}
A PrintPage eseményt már használtuk: ez akkor jön létre, ha meg kell adnunk, hogy az aktuális oldalra mi kerüljön kinyomtatásra. Ehhez az "e" paraméter Graphics property-jét használhatjuk fel, mely egy Graphics osztályt képvisel. Itt is megszakíthatjuk a nyomtatási munkát szükség esetén az "e" paraméterében kapott Cancel property igazra állításával. Ha elvégeztük az adott oldal kirajzolását és még további oldalak vannak vissza, akkor az "e" paraméter HasMorePage property-jének igazra állításával jelezhetjük ezt. Ekkor a PrintPage esemény újra meghívásra kerül.
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
listBox1.Items.Add("PrintPage");
listBox1.Update();
StreamReader sr = new StreamReader(fs);
StringBuilder sb = new StringBuilder(sr.ReadToEnd());
e.Graphics.DrawString(sb.ToString(), new Font("Courier New", 8), new SolidBrush(Color.Red), 100, 100);
}
A QueryPageSettings esemény akkor kerül meghívásra, ha a BeginPrint esemény már lefutott, de a PrintPage még nem. Itt az aktuális lapbeállítást végezhetjük el közvetlenül a tényleges nyomtatás megkezdése előtt. Példánkban, ha az aktuális nyomtató támogatja a színes nyomtatást, akkor hagyjuk tovább futni a programot és beállítjuk, hogy a nyomtatandó lap fekvő legyen. Ha viszont a nyomtató nem tud színesben nyomtatni, akkor megszakítjuk a munkát és nem nyomtatunk.
private void printDocument1_QueryPageSettings(object sender, System.Drawing.Printing.QueryPageSettingsEventArgs e)
{
listBox1.Items.Add("QueryPageSettings");
listBox1.Update();
if (printDocument1.PrinterSettings.SupportsColor)
{
e.PageSettings.Landscape = true;
}
else
{
e.Cancel = true;
listBox1.Items.Add("Cancel");
}
}