Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在winform上流畅地移动图片_C#_Timer - Fatal编程技术网

C# 在winform上流畅地移动图片

C# 在winform上流畅地移动图片,c#,timer,C#,Timer,我在winform中添加了一个计时器控件(只需使用VS2017拖放即可)。 此计时器控件在窗体上从左向右移动图片。当其处于启用状态时 private void timer1_Tick(object sender, EventArgs e) { int x = PictureBox1.Location.X + 1; if (x < 400) PixtureBox1.Location = new Point(x, 100); } private void

我在winform中添加了一个计时器控件(只需使用VS2017拖放即可)。 此计时器控件在窗体上从左向右移动图片。当其处于启用状态时

private void timer1_Tick(object sender, EventArgs e)
{
    int x = PictureBox1.Location.X + 1;

    if (x < 400) 
        PixtureBox1.Location = new Point(x, 100);
}
private void timer1\u勾选(对象发送方,事件参数e)
{
int x=PictureBox1.Location.x+1;
如果(x<400)
pix1.位置=新点(x100);
}
问题是这个移动操作移动不流畅,移动不稳。我必须坚持winform,并且想知道对于这个摇摇欲坠的运动能做些什么


如果尝试最小化间隔或增加位移,但它始终不稳定。

您必须尝试使用
OnPaint()
方法制作动画。这里有一个链接到。 您可以将计时器设置为为为要实现的目标帧速率触发,并调用
Invalidate()
Invalidate(true)
重新绘制整个窗口

帧速率指的是你正在制作动画的控件必须被重画的次数,如果你想要帧速率为30,请通过
1000/30
计算计时器间隔,即1000毫秒=1秒


因此
timer.Interval=1000/30
并在timer.Tick事件中调用
Invalidate()
以触发OnPaint()事件。

您使用的间隔是什么?Winforms中没有流畅的动画,因为它无法与监视器刷新同步。在某些情况下,您可能还希望在浮动中进行跟踪,但您的示例仅适用于每1像素注意抖动和闪烁之间的区别;后者可以通过双缓冲来避免。事实上,在Winforms上做起来有点困难,目前时间间隔较低。它相对平滑,可能通过适当的线程延迟(不确定)或在时间上动态移动更好。。我不确定我们是否希望找到一个解决方案,但目前为止,所有朝这个方向进行的优化都没有太大的改进。一个解决方案可能是不可能的。你能再澄清一点吗?我一直在读这篇文章,但没有提到帧速率,我也不清楚如何使用更改计时器事件onpaint@user3800527编辑了我的答案,包括一些解释。