Search code examples
c#winformsprintingpanel

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?


Solution

  • 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();
    }