C# - Nyomtatási események

Nyomtatás 3. rész

forráskód letöltése
Sorozatunk mostani részében a nyomtatáskor előforduló események felhasználási lehetőségeivel foglalkozunk részletesebben.
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");    
      }
    }  

Nyomtatás cikksorozat