如何在PictureBox上绘制文本?

19

我在Google上搜索了“在PictureBox上绘制文本C#”,但是没有找到有用的东西。然后我又搜索了“在Form上绘制文本C#”,找到了一些代码,但它的工作方式与我想要的不同。

    private void DrawText()
    {
        Graphics grf = this.CreateGraphics();
        try
        {
            grf.Clear(Color.White);
            using (Font myFont = new Font("Arial", 14))
            {
                grf.DrawString("Hello .NET Guide!", myFont, Brushes.Green, new PointF(2, 2));
            }
        }
        finally
        {
            grf.Dispose();
        }
    }

当我调用这个函数时,表单的背景颜色变成了白色(默认情况下是黑色)。

我的问题:

1:这对PictureBox起作用吗?

2:如何解决这个问题?


你可以创建一个标签对象,写在上面,并将其设置为任何你想要的坐标。 - BobbyShaftoe
2
标签的背景颜色将与我想要写文本的图像的背景颜色不同。 - Ivan Prodanov
1个回答

43

不需要调用Clear()方法 - 这就是为什么它会将背景变成白色并覆盖您的图片。

您需要使用PictureBox中的Paint事件。您可以从e.Graphics获取图形引用,然后使用您示例中的DrawString()方法。

这里是一个示例。只需将一个图片框添加到您的窗体中,并为其添加一个Paint事件处理程序:

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    using (Font myFont = new Font("Arial", 14))
    {
        e.Graphics.DrawString("Hello .NET Guide!", myFont, Brushes.Green, new Point(2, 2));
    }
}

注意,在设计时你看不到文本,需要运行程序才能显示。


我不理解如何解决这个问题。 - Ivan Prodanov
1
+1;@John:不要在Paint事件中调用Dispose方法的e.Graphics对象;你只是“借”它而已。 - Fredrik Mörk
@John - 背景变白是因为你将其清除为白色 - 只需跳过Clear()调用即可。请查看我的编辑 - 我添加了示例代码。 - Jon B
@John - 我以前也走过那条路。Windows 并不特别支持真正的透明度。当屏幕被调整大小时,会出现很多闪烁。如果你想尝试一下,Malfist 链接中的代码应该可以解决问题。 - Jon B
1
@John:这是另一个关于真正透明的链接,可能会更清晰一些:http://www.c-sharpcorner.com/UploadFile/Nildo/NSA106032008213555PM/NSA1.aspx - Jon B
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接