使用循环在winforms中制作一个简单的动画

时间:2010-05-31 16:07:45

标签: c#

我需要帮助制作此循环以使用动画计数(其所需)在屏幕上平滑移动标签。标签位置目前位于0,0位置我希望它位于正方形右侧 - >下来 - >左 - >回到原来的位置 我怎么能做到这一点?请使用下面的代码给我一个例子。提前谢谢。

    private void xAnimeTimer_Tick(object sender, EventArgs e)
    {
        int count;
        this.xAnimTimer.Stop();
        for (count = 0; count <= 100; count++)
        {
            this.xAnimLabel.Left = count;
        }

        for (count = 0; count <= 150; count++)
        {
            this.xAnimLabel.Top = count;
        }

2 个答案:

答案 0 :(得分:1)

我不确定为什么你必须使用for循环(我认为这是你的问题[因为它看起来我们首先完全循环每个滴答;因此它为什么它不能'干净地''')但这里是一个在我今天下午喝咖啡之前刺了它。请注意,这可能不满足您的要求,因为您声明需要循环。阅读我正在使用的控件的注释。

 public partial class Form1 : Form
{
    int left;
    int top;
    bool flgAllTheWayToTheRight = false;
    bool flgAllTheWayToTheBottom = false;

    public Form1()
    {
        // on my form I have two timers, named timer1 and tmrDraw
        // and then I have label1
        InitializeComponent();
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        if (left <= 100)
        { left++; }
        else
        { flgAllTheWayToTheRight = true; }

        if (flgAllTheWayToTheRight)
        {
            if (top <= 150)
            { top++; }
            else
            { flgAllTheWayToTheBottom = true; }
        }

        if (flgAllTheWayToTheBottom && flgAllTheWayToTheRight)
        {
            left = 0;
            top = 0;
            flgAllTheWayToTheRight = false;
            flgAllTheWayToTheBottom = false;
        }
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        label1.Text = "Animate Me.";
        timer1.Interval = 10;
        tmrDraw.Interval = 10;
        timer1.Start();
        tmrDraw.Start();
    }

    private void tmrDraw_Tick(object sender, EventArgs e)
    {
        label1.Left = left;
        label1.Top = top;
    }
}

答案 1 :(得分:-1)

尝试

for (count = 0; count <= 100; count++)
{
    this.xAnimLabel.Left = count;
    Application.DoEvents(); // <-- New
    Thread.Sleep(100); // <-- New
}

这将使标签明显移动(重新绘制UI)并且速度更慢。然后你会看到发生了什么。