4 Stimmen

Etikett über Picturebox hinzufügen

Ich versuche, etwas Text über meine Picturebox zu schreiben, also dachte ich, das einfachste und beste, was zu tun ist, ist ein Etikett darüber zu zeichnen. Dies ist, was ich tat:

PB = new PictureBox();
PB.Image = Properties.Resources.Image; 
PB.BackColor = Color.Transparent;
PB.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
PB.Size = new System.Drawing.Size(120, 30);
PB.Location = new System.Drawing.Point(100, 100);
lblPB.Parent = PB;
lblPB.BackColor = Color.Transparent;
lblPB.Text = "Text";
Controls.AddRange(new System.Windows.Forms.Control[] { this.PB });

Ich erhalte eine leere Seite ohne PictureBoxen. Was mache ich falsch?

19voto

prestomanifesto Punkte 12270

Auch wenn alle diese Antworten funktionieren, sollten Sie sich für eine sauberere Lösung entscheiden. Sie können stattdessen die picturebox's Paint Veranstaltung:

PB = new PictureBox();
PB.Paint += new PaintEventHandler((sender, e) =>
{
    e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
    e.Graphics.DrawString("Text", Font, Brushes.Black, 0, 0);
});
//... rest of your code

Editar So zeichnen Sie den Text zentriert:

PB.Paint += new PaintEventHandler((sender, e) =>
{
    e.Graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.ClearTypeGridFit;

    string text = "Text";

    SizeF textSize = e.Graphics.MeasureString(text, Font);
    PointF locationToDraw = new PointF();
    locationToDraw.X = (PB.Width / 2) - (textSize.Width / 2);
    locationToDraw.Y = (PB.Height / 2) - (textSize.Height / 2);

    e.Graphics.DrawString(text, Font, Brushes.Black, locationToDraw);
});

7voto

Kendall Frey Punkte 41152

Anstelle von

lblPB.Parent = PB;

do

PB.Controls.Add(lblPB);

3voto

Jinwoo.Seo Punkte 81

Ich habe dies versucht. (keine Picturebox verwenden)

  1. Verwenden Sie zuerst die "Panel"-Kontrolle
  2. BackgroundImage & BackgroundImageLayout des Panels einstellen (Stretch)
  3. Etikett hinzufügen Im Panel

das ist alles

2voto

Omar Punkte 15583

Sie müssen das Steuerelement zur PictureBox . Also:

PB.Controls.Add(lblPB):

EDIT:

Ich erhalte eine leere Seite ohne PictureBoxen.

Sie haben den Bildrahmen nicht gesehen, weil er die gleiche Hintergrundfarbe wie das Formular hat. Versuchen Sie also, BorderStyle und die BackColor zu setzen. Ein weiterer Fehler ist, dass Sie wahrscheinlich die Position des Labels nicht festgelegt haben. So:

PB.BorderStyle = BorderStyle.FixedSingle;
PB.BackColor = Color.White;
lblPB.Location = new Point(0,0);

0voto

Zerato Punkte 653

Es gibt eine andere Möglichkeit, das zu tun. Sie ist sehr einfach, aber wahrscheinlich nicht die beste. (Ich bin ein Anfänger, also mag ich es einfach)

Wenn ich Ihre Frage richtig verstanden habe, möchten Sie die Beschriftung über/auf der pictureBox platzieren. Die folgende Code-Zeile wird das tun.

myLabelsName.BringToFront();

Nun, Ihre Frage wurde bereits beantwortet, aber vielleicht kann dies jemand anderem helfen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X