title: Writing dynamic label to picturebox image only drawing the last modified label
body: <p>Okay, to start off. I'm trying to make dynamic editable, addable, and removeable text onto a picturebox. I got that working.</p>
  
  <p>When saving an image from a picturebox, it doesn't save the labels. I now got it to draw the labels as a string using Graphics. Yet, it only draws the last modified/added/edited label to the pictureBox. I'm lost.</p>
  
  <p>Here's my code for drawing the labels &amp; saving them:</p>
  
  <pre><code>if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
              {
                  string ext = Path.GetExtension(sfd.FileName);
                  switch (ext)
                  {
                      case ".jpg":
                          format = ImageFormat.Jpeg;
                          break;
                      case ".bmp":
                          format = ImageFormat.Bmp;
                          break;
                  }
                  Bitmap bmp = new Bitmap(pictureBox1.Image);
  
                  RectangleF rectf = new RectangleF(70, 90, 90, 50);
  
                  Graphics g = Graphics.FromImage(bmp);
  
                  g.SmoothingMode = SmoothingMode.AntiAlias;
                  g.InterpolationMode = InterpolationMode.HighQualityBicubic;
                  g.PixelOffsetMode = PixelOffsetMode.HighQuality;
  
                  g.Flush();
                  g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
                  SolidBrush brush = new SolidBrush(label.ForeColor);
  
                  for (int i = 0; i &lt; n; i++)
                  { 
                      g.DrawString(label.Text, label.Font, brush, label.Location);
                      label.SelectNextControl(label, false, false, true, false);
                  }
  
                  pictureBox1.Image = bmp;
                  pictureBox1.Image.Save(sfd.FileName, format);
              }
  </code></pre>
  
  <p>Here's where the labels are defined and created:</p>
  
  <pre><code>label = new CustomLabel();
  label.Name = "" + n;
  label.Location = new Point(newTextbox.Location.X, newTextbox.Location.Y);
  label.Text = newTextbox.Text;
  label.Font = new Font("Verdana", fontSize);
  label.BackColor = Color.Transparent; 
  
  label.ForeColor = textColor;
  label.AutoSize = true;
  label.Visible = true;
  newTextbox.Visible = false;
  newTextbox.Dispose();
  
  pictureBox1.Controls.Add(label);
  TextSelected = false;
  label.DoubleClick += new System.EventHandler(this.label_DoubleClick);
  label.MouseDown += new MouseEventHandler(this.label_MouseDown);
  label.MouseUp += new MouseEventHandler(this.MouseUp);
  label.MouseMove += new MouseEventHandler(this.MouseMove);
  n++;
  </code></pre>
  
  <p>And n is defined:</p>
  
  <pre><code>public int n = 1;
  </code></pre>
  
  <p>Where the stroke is added to the text:</p>
  
  <pre><code>public class CustomLabel : Label
      {
          public CustomLabel()
          {
              OutlineForeColor = Color.Black;
              OutlineWidth = 3;
          }
          public Color OutlineForeColor { get; set; }
          public float OutlineWidth { get; set; }
          protected override void OnPaint(PaintEventArgs e)
          {
              e.Graphics.FillRectangle(new SolidBrush(BackColor), ClientRectangle);
              using (GraphicsPath gp = new GraphicsPath())
              using (Pen outline = new Pen(OutlineForeColor, OutlineWidth)
              { LineJoin = LineJoin.Round })
              using (StringFormat sf = new StringFormat())
              using (Brush foreBrush = new SolidBrush(ForeColor))
              {
                  gp.AddString(Text, Font.FontFamily, (int)Font.Style,
                      Font.Size, ClientRectangle, sf);
                  e.Graphics.ScaleTransform(1.3f, 1.35f);
                  e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
                  e.Graphics.DrawPath(outline, gp);
                  e.Graphics.FillPath(foreBrush, gp);
              }
          }
      }
  </code></pre>