C# 在Picturebox上添加标签

C# 在Picturebox上添加标签,c#,forms,label,picturebox,C#,Forms,Label,Picturebox,我试图在我的图片盒上写一些文字,所以我认为最简单也是最好的办法就是在上面画上标签。这就是我所做的: 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(1

我试图在我的图片盒上写一些文字,所以我认为最简单也是最好的办法就是在上面画上标签。这就是我所做的:

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 });
我得到的是一张没有图片盒的空白页。我做错了什么?

而不是

lblPB.Parent = PB;


您必须将控件添加到
图片框中
。因此:

PB.Controls.Add(lblPB):
编辑:

我得到的是一张没有图片盒的空白页

您没有看到picturebox,因为它与表单的底色相同。因此,尝试设置边框样式和背景色。另一个错误是您可能没有设置标签的位置。因此:

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

当所有这些答案都有效时,你应该考虑选择更干净的解决方案。您可以改为使用picturebox的
Paint
事件:

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
编辑以居中绘制文本:

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);
});

还有另一种方法。这很简单,但可能不是最好的。(我是初学者,所以我喜欢简单的东西)

如果我没弄错你的问题,你想把标签贴在图片盒的上面。下面的代码行将执行此操作

myLabelsName.BringToFront();
现在,你的问题已经得到了回答,但也许这可以帮助其他人。

我试过了。(不使用图片盒)

  • 首先使用“面板”控件
  • 设置面板的背景图像和背景图像布局(拉伸)
  • 在面板内添加标签

  • 仅此而已

    这不是“最好”的方法,但却是最简单的方法。“最佳”方法是处理PictureBox的
    Paint
    事件,并使用
    e.Graphics.DrawText
    绘制文本。如果完全移除
    标签,您是否验证了
    PictureBox
    自动显示?你确定你的代码被调用了吗?是的,我已经验证了,pb显示没有标签。不管怎样,我使用了画画事件作为建议下来,现在我面临的问题是改变文本的颜色,大小,字体和位置它做了,但不是你想要的。如果表单上没有出现PictureBox,则说明您没有发布的代码有问题。确实,完美,正是我所需要的,谢谢男/女:)尽管如此,我很想知道如何使用此功能编辑文本字体、大小和位置查看DrawString方法,字体、大小和位置都可以在此处设置。只是要小心内存泄漏(例如,如果你创建了一种字体,在某个时候处理它)你已经帮了大忙,但仍然有一个问题:D我想把图片框中的文本居中。。。我该怎么做?我尝试过使用图形的宽度,但不知道如何。。。
    myLabelsName.BringToFront();