我有一个每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()上重新绘制圆圈时,让它保持这种状态,直到下次被调用为止?
答案 0 :(得分:0)
Winforms GDI +已经有一段时间......
新方法:进行用户控制并输入下面的代码,然后用新控件替换你的图片框(你必须编译一次以便它在你的工具箱中)和你的代码,然后调用UpdateCircle方法新控件:
public partial class CircleControl : UserControl
{
private Random rnd = new Random();
Pen p = new Pen(Color.Blue, 3);
public CircleControl()
{
InitializeComponent();
this.Paint += CircleControl_Paint;
}
public void UpdateCircle()
{
this.Invalidate();
}
void CircleControl_Paint(object sender, PaintEventArgs e)
{
e.Graphics.Clear(Color.White);
int randomInt = rnd.Next(0, 11);
e.Graphics.DrawEllipse(p, new Rectangle(new Point(0, randomInt), this.Size));
}
}