Home arrow C# arrow Page 3 - Printing Using C#

Printing Using C#

In this article Matthew shows us how to build a print engine in C# allowing us to print our application data easily.

Author Info:
By: Wrox Team
Rating: 4 stars4 stars4 stars4 stars4 stars / 371
January 27, 2003
  1. · Printing Using C#
  2. · Creating a Printing Application
  3. · Creating the Project
  4. · Primitives and Elements
  5. · Pagination and Printing
  6. · Changing the Page Settings
  7. · Conclusion

print this article

Printing Using C# - Creating the Project
(Page 3 of 7 )

Create a new Visual C# - Windows Application project now and call it Printing. Add these controls to Form1:


Here are the controls:
  • trackCustomers - this slider bar should have a minimum value of 0 and a maximum value of 128. Set Value to 1.
  • cmdPrintPreview - the print preview button.
  • cmdPageSettings - the page settings button.
  • cmdPrint - the print button.
That's all there is to the form. Let's now look at building the rest of the classes.


The Framework provides a class called PrintDocument that encapsulates everything related to printing. Those of you who have used MFC, don't worry too much about the word "document". There's nothing related to the "document/view" model you might be thinking of. The "document" is simply something that you want to print.

To use this class you have two options: either respond to events fired by the class or inherit from the class and build upon the functionality. In this instance, we're going to inherit from it. Create a new class called PrintEngine and add these:

using statements:
using System;
using System.Collections;
using System.Drawing;
using System.Drawing.Printing;
using System.Windows.Forms;

Next, derive PrintEngine from PrintDocument:

  public class PrintEngine : PrintDocument

This project is a little "chicken and egg", so we'll be jumping between classes as we try and build up the example. Perhaps the best place to start is maintaining a list of the objects that we want to include on the report.

As we build the report, we'll add Customer objects to an ArrayList maintained in PrintEngine. Whenever we want to print the report, or display a preview, we'll use methods to add objects that understand how to print themselves to this ArrayList.

Add this member to PrintEngine:

  public class PrintEngine : PrintDocument
    private ArrayList _printObjects = new ArrayList();

In a moment, we'll build an interface called IPrintable that an object must support if it wants to be printed by PrintEngine. Add this method to PrintEngine that accepts an object supporting this interface and adds it to _printObjects:

    // AddPrintObject - add a print object the document...
    public void AddPrintObject(IPrintable printObject)

Now, create a new class called IPrintable and add this code:

using System;

namespace Printing
  public interface IPrintable
    // Print
    void Print(PrintElement element);

As you can see, our interface only has a single method: Print. You'll also notice that it takes a parameter of PrintElement type. We haven't built that yet, but it will represent a single instance of an element on a page. Bear with me until we get to it!

To complete this circle, create a new object called Customer. Add these members:

  public class Customer : IPrintable
    // members...
    public int Id;
    public String FirstName;
    public String LastName;
    public String Company;
    public String Email;
    public String Phone;

As we've told Customer that it must support IPrintable, we need to implement the method. However, we won't build any print functionality in just yet. Add this method to Customer:

    // Print...
    public void Print(PrintElement element)

OK, so we're now at a point where we can create instances of a class called Customer that, because it implements IPrintable, we can use PrintEngine.AddPrintObject to add it to the final document. Let's look now at building up the primitives and then take a look at implementing the elements themselves.
blog comments powered by Disqus

- Introduction to Objects and Classes in C#, P...
- Visual C#.NET, Part 1: Introduction to Progr...
- C# - An Introduction
- Hotmail Exposed: Access Hotmail using C#
- Razor Sharp C#
- Introduction to Objects and Classes in C#
- Making Your Code CLS Compliant
- Programming with MySQL and .NET Technologies
- Socket Programming in C# - Part II
- Socket Programming in C# - Part I
- Creational Patterns in C#
- Type Conversions
- Creating Custom Delegates and Events in C#
- Inheritance and Polymorphism
- Understanding Properties in C#

Watch our Tech Videos 
Dev Articles Forums 
 RSS  Articles
 RSS  Forums
 RSS  All Feeds
Write For Us 
Weekly Newsletter
Developer Updates  
Free Website Content 
Contact Us 
Site Map 
Privacy Policy 

Developer Shed Affiliates


© 2003-2018 by Developer Shed. All rights reserved. DS Cluster - Follow our Sitemap
Popular Web Development Topics
All Web Development Tutorials