C#动画形式向上

时间:2018-08-28 15:56:40

标签: c# forms winforms animation

我想知道如何向上制作C#表格的动画。

这是我当前的代码。但这是行不通的。表格不向上移动 https://hastebin.com/rogufowoqi.cs

我要执行的操作是转到屏幕底部不可见的右下角,然后逐步向上移动,直到到达顶部(如果它位于for屏幕的可见右下角的位置)为止

A image made for clarification

Github Repository


我需要更多帮助

            using System;
            using System.Collections.Generic;
            using System.ComponentModel;
            using System.Data;
            using System.Drawing;
            using System.Linq;
            using System.Text;
            using System.Threading.Tasks;
            using System.Windows.Forms;
            using System.Threading;
            using System.IO;
            using System.Media;

            namespace csharp_notification
            {
                public partial class Notification : Form
                {
                    public Notification()
                    {
                        InitializeComponent();
                    }

                    string[] ScreenResolution = { Screen.PrimaryScreen.Bounds.Width.ToString(), Screen.PrimaryScreen.Bounds.Height.ToString() };

                    private void Form1_Load(object sender, EventArgs e)
                    { 
                        // Set location of notification
                        this.SetDesktopLocation(Convert.ToInt32(ScreenResolution[0]) - this.Width, Convert.ToInt32(ScreenResolution[1]));

                        animatetimer.Start();

                        Sound();

                        godown = this.Height;
                        animationtimerdown.Start();
                    }

                    public void GoAway()
                    {
                        Thread.Sleep(10000);
                        Application.Exit();
                    }

                    public void Sound()
                    {
                        SoundPlayer notif = new SoundPlayer(Properties.Resources.notification);
                        notif.Play();

                    }

                    public int goup = 0;
                    public int godown = 0;

                    public bool done = false;

                    private void animatetimer_Tick(object sender, EventArgs e)
                    {
                        if(goup < this.Height + 1)
                        {
                            this.SetDesktopLocation(Convert.ToInt32(ScreenResolution[0]) - this.Width, Convert.ToInt32(ScreenResolution[1]) - goup);
                        }
                        else if(goup > this.Height)
                        {
                            done = true;
                            animatetimer.Stop();
                        }
                        goup = goup + 5;
                    }

                    private void animationtimerdown_Tick(object sender, EventArgs e)
                    {
                        if (done == true & 0 < godown)
                        {
                            this.SetDesktopLocation(Convert.ToInt32(ScreenResolution[0]) - this.Width, Convert.ToInt32(ScreenResolution[1]) + godown);
                        }
                        godown = godown - 5;
                    }
                }
            }

我现在需要它下来。但这不起作用。

它只能在上升时起作用。

我尝试使其下降的方式与上升相反。

1 个答案:

答案 0 :(得分:2)

看看您的代码,这似乎是一个问题:

public void Animation(string direction)
{
    for(int goup = this.Height; goup > 0; goup--)
    {
        this.SetDesktopLocation(Convert.ToInt32(ScreenResolution[0]) - this.Width, Convert.ToInt32(ScreenResolution[1]) - goup);
        Thread.Sleep(1000);
    }
}

此方法用于对屏幕进行动画处理,但这是一个阻止调用,并且在阻止时不会调用任何窗口重绘事件。

现在,您可以在Application.DoEvents();通话之前放置Thread.Sleep(1000);作弊,但最好使用Timer来制作动画。

在您的构造函数中:

Timer animatetimer = new Timer();
animatetimer.Interval = 1000;
animatetimer.Tick += animatetimer_Tick;

滴答事件处理程序:

public void animatetimer_Tick(object sender, EventArgs e)
{
    this.SetDesktopLocation(Convert.ToInt32(ScreenResolution[0]) - this.Width, Convert.ToInt32(ScreenResolution[1]) - goup);

    // Stop the timer when the goup gets to your required value.
}

然后,当您要显示屏幕通话时:

animatetimer.Start();

我遗漏了一些细节。您需要将每个goup的{​​{1}}值递减。您还需要将Tick设为类级变量。重新启动goup时,还需要重置它。