逐渐移动图片框,而不是立即移动

我有一个PictureBox,我想在点击按钮后在y轴上向上移动。 问题是,按钮单击后,PictureBox只会出现在那里。 我希望它能够转移到新的位置,而不是传送。 我该怎么办?

public partial class Form1 : Form { Point stageplus1 = new Point(164, 325); public Form1() { InitializeComponent(); } private void button2_Click(object sender, EventArgs e) { pictureBox5.Location = stageplus1; } private void pictureBox5_Click(object sender, EventArgs e) { } } 

扩展BJ迈尔斯评论这是你如何实现:

 private void button2_Click(object sender, EventArgs e) { this.timer1.Enabled = true; } private void timer1_Tick(object sender, EventArgs e) { // calculate new position this.pictureBox1.Top++; this.pictureBox1.Left++; // when to stop if (this.pictureBox1.Top > (this.Height - (2 * this.pictureBox1.Height))) { this.timer1.Enabled = false; } } 

我使用默认的Timer控件,以一定间隔引发Tick。 Tick事件在UI线程上执行,因此您不必受跨线程错误的困扰。

如果添加到您的表单中,这将是您将获得的:

肯尼动了

如果你需要动画更多的东西你可能想要使用背景工作者和帮助程序类,如我在这个答案中显示的那样