【发布时间】:2013-12-10 01:00:03
【问题描述】:
我有一个里面有图像的pictureBox1,当我点击它时,它的绘图点。 现在我添加了一个重置按钮,当我单击它时调用它,它应该清除我在图片框上所做的所有绘图,并将图像留在里面,而没有绘图。
我做到了:
private void button4_Click(object sender, EventArgs e)
{
Graphics graphics;
graphics = pictureBox1.CreateGraphics();
graphics.DrawImage(pictureBox1.Image, 0, 0);
}
所以我在pictureBox1 上画了很多点,然后单击按钮,所有点都消失了,但是一旦我再次单击picturebox1,我也看到了新点以及我在清除之前所做的旧点。
如何清除旧图纸,使其不会在下次点击时显示?
这是绘画事件:将绘画事件移至新类:
public static void Paint(List<PointF> pb1points, GraphicsPath pb1gp, Point movingPoint, PictureBox pictureBox1, Graphics e)
{
e.Clear(Color.White);
e.DrawImage(pictureBox1.Image, movingPoint);
Pen p;
p = new Pen(Brushes.Green);
foreach (PointF pt in pb1points)
{
e.FillEllipse(Brushes.Red, pt.X, pt.Y, 3f, 3f);
}
using (Pen pp = new Pen(Color.Green, 2f))
{
pp.StartCap = pp.EndCap = LineCap.Round;
pp.LineJoin = LineJoin.Round;
e.DrawPath(pp, pb1gp);
}
}
【问题讨论】:
-
你永远不应该使用
CreateGraphics()。相反,您需要在 Paint 事件中绘制所有内容。 -
pictureBox1.Image = null; -
您将点保存在列表中。您不再需要它们,因此只需使用列表的 Clear() 方法。并调用图片框的 Invalidate() 方法让它重新绘制自己。