2012-10-28 56 views
1

我正在嘗試在進程正在進行時爲標籤製作動畫。我希望它是這樣的(逐幀):使用計時器動畫標籤不起作用

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... 

第四時間並不動畫的。從第五次開始經歷這個週期。

這真的很吸引我。什麼可能是錯誤的?

回答

1

您的StartAnimation()正在每次啓動時添加事件處理程序。這會導致你看到的問題。

第二次您撥打StartAnimation()您將有兩個事件處理程序連接到Tick事件。它會每250秒調用一次您的代碼而不是一次。所以你看到的圖案

Searching.. 
Searching 
Searching.. 
Searching 

第三次有事件處理程序,你會得到的圖案

Searching... 
Searching.. 
Searching. 
Searching 
Searching... 

等。第四次沒有任何反應,因爲它已經做了四次並且回到原來的狀態。

可以移動

_animationTimer.Tick += new EventHandler(this.AnimationEvent); 

線StartAnimation之外 - 或檢查它的空,只會增加它的第一次。

+0

這絕對是原因,現在我已經修復它。非常感謝! – hattenn