使用计时器移动图片框

时间:2009-12-04 18:33:10

标签: c# gdi+

我试图通过每隔20ms更改其Top和Left属性来移动包含控件中的图片框。在黑色背景上它有点平滑,但是当为控件分配BackgroundImage时,图片框会在其后面留下一条线索,直到几秒钟后重新绘制控件,然后突然减速然后向前发射,或以锯齿状轨迹移动。

我认为当重新绘制PictureBox控件时,更改其左侧和顶部属性的线程将暂停,直到重绘完成并导致它在重绘完成时排队暂停的定时器循环的任何迭代

无论如何都要平滑图片框的运动吗?

由于 ˚F

2 个答案:

答案 0 :(得分:3)

我建议在一个控件中绘制图像,而不是在控件周围移动。

创建自定义控件,覆盖OnPaint并在其中绘制“图片框”。如果你这样做,你也可以回缓冲。通过调用Graphics.FromImage()从图像创建图形对象来完成此操作。绘制到最后,最后在绘制完成后,在REAL图形对象(在eventArgs中)调用g.DrawImage。

答案 1 :(得分:2)

我不确切知道如何解决问题(除了切换到WPF),但我可以说你得到的滞后来自于移动PictureBox时正在更新的区域的失效。你想要做的是以某种方式回缓冲新位置并切换到缓冲区,而不是依靠GDI实时重绘。 HTH。