当我尝试打印PictureBox
时,会抛出ArgumentException
(参数无效)。
这是打印功能:
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));
}
}
所有打印问题都有效,但有时打印PictureBox
会引发Exception
,那么如何解决此问题呢?
答案 0 :(得分:9)
试试这个:有点简单:
在按钮点击事件中添加以下代码:
PrintDocument printDocument1 = new PrintDocument();
printDocument1.PrintPage +=new PrintPageEventHandler(printDocument1_PrintPage);
printDocument1.Print();
然后是printDocument1_PrintPage事件:
private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
e.Graphics.DrawImage(pic.Image, 0, 0);
}
其中pic是图片框..
这会在图片框中打印图像。