Polowing
Polowing

Reputation: 123

How to print a panel in WinFormc#?

I have a panel which have labels and a datagridview. I'm trying to print the panel with its contents using this code

    PrintDialog myPrintDialog = new PrintDialog();
        System.Drawing.Bitmap memoryImage = new System.Drawing.Bitmap(panel2.Width, panel2.Height);
        panel2.DrawToBitmap(memoryImage, panel2.ClientRectangle);
        myPrintDialog.ShowDialog();

            System.Drawing.Printing.PrinterSettings values;
            values = myPrintDialog.PrinterSettings;
            myPrintDialog.Document = printDocument1;
            printDocument1.PrintController = new StandardPrintController();
            printDocument1.Print();

        printDocument1.Dispose();

But it prints nothing. I remove the datagridview but still prints nothing. Then I change the panel back color but again it prints white page. Kindly Guide me How I do this?

Upvotes: 3

Views: 2174

Answers (1)

Shell
Shell

Reputation: 6849

Add this code to PrintPage event and call the Print() method from PrintDocument class object

private void doc_PrintPage(object sender, PrintPageEventArgs e)
{
    float x = e.MarginBounds.Left;
    float y = e.MarginBounds.Top;
    Bitmap bmp = new Bitmap(panel2.Width, panel2.Height);
    panel2.DrawToBitmap(bmp, new Rectangle(0, 0, panel2.Width, panel2.Height));
    e.Graphics.DrawImage((Image)bmp, x, y);
}

Call the method like this

PrintDocument doc = new PrintDocument();
doc.PrintPage += this.doc_PrintPage;

PrintDialog dlg = new PrintDialog();
dlg.Document = doc;
if (dlg.ShowDialog() == DialogResult.OK)
{
    doc.Print();
}

Upvotes: 5

Related Questions