Printing picture box
16,072
Try this: somewhat simple:
Add the following code in the button click event:
PrintDocument printDocument1 = new PrintDocument();
printDocument1.PrintPage +=new PrintPageEventHandler(printDocument1_PrintPage);
printDocument1.Print();
Then the printDocument1_PrintPage event :
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawImage(pic.Image, 0, 0);
}
where pic is the picture box..
This prints the image in the picturebox.
Author by
alaa joma
Updated on June 14, 2022Comments
-
alaa joma almost 2 years
When I try to print a
PictureBox
, anArgumentException
is thrown (parameter is not valid).This is the printing functions:
void pdGroupBox_PrintPage(object sender, PrintPageEventArgs e) { foreach(Control control in _GbFrm.Controls) DrawControls(control, e.Graphics); } private void DrawControls(Control control,Graphics g) { var font = new Font("Arial", 10); var brush = new SolidBrush(Color.Black); var drawFormat = new StringFormat { FormatFlags = StringFormatFlags.DirectionRightToLeft }; if (control is Label) { if ((string)control.Tag == "1") //Treated with 1 columns of fields. { g.DrawString( control.Text, font, brush, new Rectangle(control.Location.X - 160, control.Location.Y, control.Size.Width + 10, control.Size.Height), drawFormat); } if ((string)control.Tag == "2") //Treated with 2 columns of fields. { g.DrawString( control.Text, font, brush, new Rectangle(control.Location.X - 70, control.Location.Y, control.Size.Width + 10, control.Size.Height), drawFormat); } if ((string)control.Tag == "3") //Treated with 3 columns of fields. { g.DrawString( control.Text, font, brush, new Rectangle(control.Location.X, control.Location.Y, control.Size.Width + 10, control.Size.Height)); } } else if (control is TextBox || control is ComboBox) { if ((string)control.Tag == "1") //Treated with 1 columns of fields. { g.DrawRectangle( new Pen(Color.Black, 1), new Rectangle(control.Location.X - 120, control.Location.Y, control.Size.Width - 40, control.Size.Height)); g.DrawString( control.Text, font, brush, new Rectangle(control.Location.X - 120, control.Location.Y, control.Size.Width - 40, control.Size.Height), drawFormat); } if ((string)control.Tag == "2") //Treated with 2 columns of fields. { g.DrawRectangle( new Pen(Color.Black, 1), new Rectangle(control.Location.X - 30, control.Location.Y, control.Size.Width - 40, control.Size.Height)); g.DrawString( control.Text, font, brush, new Rectangle(control.Location.X - 30, control.Location.Y, control.Size.Width - 40, control.Size.Height), drawFormat); } if ((string)control.Tag == "3") //Treated with 3 columns of fields. { g.DrawRectangle( new Pen(Color.Black, 1), new Rectangle(control.Location.X, control.Location.Y, control.Size.Width, control.Size.Height)); g.DrawString( control.Text, font, brush, new Rectangle(control.Location.X, control.Location.Y, control.Size.Width, control.Size.Height), drawFormat); } } else if (control is PictureBox && control.Visible) { var img = ((PictureBox)control).Image; var bitmap = new Bitmap(img,new Size(img.Width,img.Height)); g.DrawImage( bitmap, new Rectangle(control.Location.X, control.Location.Y, control.Size.Width, control.Size.Height)); } else if (control is DateTimePicker) { g.DrawString( control.Text, font, brush, new Rectangle(control.Location.X, control.Location.Y, control.Size.Width + 10, control.Size.Height)); } }
All the printing issues work, but some times printing a
PictureBox
raises thatException
, so how can I solve this problem?