我需要帮助制作此循环以使用动画计数(其所需)在屏幕上平滑移动标签。标签位置目前位于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;
}
答案 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)并且速度更慢。然后你会看到发生了什么。