2012-12-26 174 views
2

当我尝试打印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,所以我怎么能解决这个问题?

+1

你能发布异常吗?打印你的意思是打印机?或在屏幕上绘图? – elyashiv

+0

打印到打印机。但例外来自此代码: 位图位图=新位图(img,新尺寸(img.Width,img.Height)); 因为每个(img.Width,img.Height)包含(参数无效) –

+0

异常消息是“参数无效”。 –

回答

4

试试这个:有些简单:

添加以下代码在按钮单击事件:

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是图片框。 。

这将在图片框中打印图像。