我想知道如何向上制作C#表格的动画。
这是我当前的代码。但这是行不通的。表格不向上移动 https://hastebin.com/rogufowoqi.cs
我要执行的操作是转到屏幕底部不可见的右下角,然后逐步向上移动,直到到达顶部(如果它位于for屏幕的可见右下角的位置)为止
A image made for clarification
我需要更多帮助
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;
}
}
}
我现在需要它下来。但这不起作用。
它只能在上升时起作用。
我尝试使其下降的方式与上升相反。
答案 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
时,还需要重置它。