【发布时间】:2014-12-27 15:06:21
【问题描述】:
我有一个每 500 毫秒调用一次的函数,它应该删除 PictureBox 中包含的旧绘图并用新绘图替换它
public override void onUpdate()
{
pictureBox.Image = null;
Graphics g = pictureBox.CreateGraphics();
Pen p = new Pen(System.Drawing.Color.Blue, 3);
Random rnd = new Random();
int randomInt = rnd.Next(0, 11);
g.DrawEllipse(p, new Rectangle(new Point(0,randomInt), pictureBox.Size));
p.Dispose();
g.Dispose();
return;
}
不起作用(屏幕上什么也没有出现),除非在调试时.. 而当我这样做时:
public override void onUpdate()
{
Graphics g = pictureBox.CreateGraphics();
Pen p = new Pen(System.Drawing.Color.Blue, 3);
Random rnd = new Random();
int randomInt = rnd.Next(0, 11);
g.DrawEllipse(p, new Rectangle(new Point(0,randomInt), pictureBox.Size));
p.Dispose();
g.Dispose();
System.Threading.Thread.Sleep(5000);
pictureBox.Image = null;
return;
}
圆圈每 5 秒绘制一次,然后消失 500 毫秒
第二个对我来说是逻辑,但我不明白为什么第一个不能按我想要的方式工作。如果我删除“pictureBox.Image = null;”行,旧的圆圈没有被删除。
我能做什么,每次调用 onUpdate() 时都重新绘制圆圈,并让它一直保持到下一次调用它?
【问题讨论】:
-
您应该使用绘图事件中的 Graphic 对象,而不是 CreateGraphics。您还应该使用计时器,而不是循环(我猜这就是您调用 onUpdate 的方式)。在tick 事件中,调用
pictureBox.Invalidate();,在paint 事件中,绘制你的图片。无需设置 Image 属性。
标签: c# picturebox system.drawing