我正在尝试在流程正在进行时为标签添加动画效果。我希望它是这样的(逐帧):
Searching
Searching.
Searching..
Searching...
Searching
等等。我试过这样做:
Timer _animationTimer = new Timer();
private void StartAnimation()
{
myLabel.Text = "Searching";
_animationTimer.Interval = 250;
_animationTimer.Tick += new EventHandler(this.AnimationEvent);
_animationTimer.Start();
}
private void StopAnimation()
{
_animationTimer.Stop();
}
private void AnimationEvent(object sender, EventArgs e)
{
if (!myLabel.Text.EndsWith("..."))
{
myLabel.Text += ".";
}
else
{
myLabel.Text = "Searching";
}
}
我这样使用它:
StartAnimation();
// ... do something.
StopAnimation();
myLabel.Text = "Something";
但它不起作用。它第一次运行时,它完美地动画。第二次它表明了这一点:
Searching..
Searching
Searching..
Searching
并且第三次显示:
Searching...
Searching..
Searching.
Searching
Searching...
并且它第四次没有动画。从第五次起,它就会经历这个循环。
这真的很吸引我。什么可能是错的?
答案 0 :(得分:1)
每次启动时,StartAnimation()
都会添加事件处理程序。这将导致你遇到的问题。
第二次调用StartAnimation()
时,您将有两个事件处理程序连接到Tick事件。它会每250秒调用一次代码,而不是一次。所以你看到模式
Searching..
Searching
Searching..
Searching
第三次有三个事件处理程序并且你得到了模式
Searching...
Searching..
Searching.
Searching
Searching...
等等。第四次没有任何反应,因为它正在进行四次并返回到原始状态。
你可以移动
_animationTimer.Tick += new EventHandler(this.AnimationEvent);
在StartAnimation之外的行 - 或检查它是否为null并且仅在第一次添加它。