没有OnPaint

时间:2015-08-15 14:45:39

标签: c# winforms animation graphics invalidation

我正在尝试在Win Forms中制作动画,我尝试了一种不同的方法,而不是在timer_elapsed处理程序中调用Invalidate(),然后在OnPaintHandler中执行操作。

我只是直接在pictureBox上绘制图像,然后当timer_ticks,我调用Invalidate,然后我手动重绘更新位置上的图像。

static void tmrMoving_Elapsed(object sender, EventArgs e, Train t)
{
    MainForm.playBox.Invalidate();

    g.DrawImage(t.components[i], new Rectangle(
                new Point(t.nextVagoonPositionX * 20, t.nextVagoonPositionY * 20), 
                new Size(20, 20)));
    t.nextVagoonPositionX += 1;
    t.nextPositionX = -1;
}

我有一个问题,当计时器滴答时,有时会得到所需的图像,有时不会,有30%的机会不能绘制(我有1秒的计时器间隔,所以我可以看到它),即使对象是移动或只是在同一个地方。

我尝试过的事情:

1.在Invalidate()中设置区域args - >图像在旧图像旁边被绘制了很多次(因此,由于旧图像保留在它们的位置,因此不能在所需位置重新绘制)

2.在invalidate->之后调用Update()或Refresh()或两者。没有显示任何图像

3.将Update()或Refresh()或两者与Invalidate(rectangulous region)结合 - >没有图像显示

4.设置DoubleBuffering为true - >没效果

5.摆弄this.SetStyle(ControlStyles.UserPaint,true); - >没有效果(甚至不确定它是做什么的。)

0 个答案:

没有答案
相关问题