开发者

Printing contents of controls in C#?

I have never printed anything using C#. I was just wondering what the standard way to do this was. On my form I have a few listboxes and a few textboxes. I would like to print their contents and show them in a print preview, with a nice layout in a table. Then from their I would like the user to be able开发者_运维知识库 to print.

Thanks in advance!


Here's a nice little tutorial on basic printing in C#. It deals with text but could be extended easily to draw anything else.

Printing in C# is very similar to custom painting in C#. The big difference is that the coordinate system is flipped from the screen representation and that you have to account for spanning of pages (if/when necessary.) The way you print is also a bit counter intuitive in that you have to initiate the print process and then handle the page print event.

Example:

Here is a simple example of a print event handler that assumes the presence of list box control named listBox1 with some items in it. It draws each item as well as a box around it.

private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    Font font = new Font("Arial", 10f);
    Graphics g = e.Graphics;
    Pen rectPen = new Pen(Color.Black, 2f);
    Brush brush = Brushes.Black;

    // find widest width of items
    for (int i=0; i<listBox1.Items.Count; i++)
        if(maxItemWidth < (int)g.MeasureString(listBox1.Items[i].ToString(), font).Width)
            maxItemWidth = (int)g.MeasureString(listBox1.Items[i].ToString(), font).Width;

    // starting positions:
    int itemHeight = (int)g.MeasureString("TEST", font).Height + 5;
    int maxItemWidth = 0;
    int xpos = 200;
    int ypos = 200;

    // print
    for (int i = 0; i < listBox1.Items.Count; i++)
    {
        g.DrawRectangle(rectPen, xpos, ypos, maxItemWidth, itemHeight );
        g.DrawString(listBox1.Items[i].ToString(), font, brush, xpos, ypos);

        ypos += itemHeight;
    }

    e.HasMorePages = false;
}


You will want to use System.Drawing.Printing libraries. You'll use the PrintDocument.Print method which you can find on the MSDN Page with Example


One method is summarized nicely here at CodeProject having a Print implementation. As for Print Preview, somebody has tackled an implementation here.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜