将绘图分配给pictureBox

时间:2014-10-31 10:16:50

标签: c# picturebox system.drawing

我有一个每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()上重新绘制圆圈时,让它保持这种状态,直到下次被调用为止?

1 个答案:

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