title: Printing picture box
body: <p>When I try to print a <code>PictureBox</code>, an <code>ArgumentException</code> is thrown (parameter is not valid).</p>
  
  <p>This is the printing functions:</p>
  
  <pre><code>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 &amp;&amp; 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));
      }
  }
  </code></pre>
  
  <p>All the printing issues work, but some times printing a <code>PictureBox</code> raises that <code>Exception</code>, so how can I solve this problem?</p>