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";

しかし、うまくいきません。初めて実行すると、完全にアニメーション化されます。2回目はこれを示しています:

Searching..
Searching
Searching..
Searching

そして 3 回目には次のように表示されます。

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

4回目はまったくアニメーションしません。そして5回目以降はこのサイクルを繰り返します。

本当に興味をそそられます。何が間違っている可能性がありますか?

4

1 に答える 1

1

StartAnimation()開始するたびにイベントハンドラーを追加しています。これは、あなたが見ている問題を引き起こすでしょう。

2 回目の呼び出しStartAnimation()では、2 つのイベント ハンドラーが Tick イベントに接続されます。コードは 1 回ではなく 250 秒ごとに 2 回呼び出されます。だからあなたはパターンを見る

Searching..
Searching
Searching..
Searching

3 回目は3 つのイベント ハンドラーがあり、パターンを取得します。

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

等々。4回目は4回やって元に戻るから何も起こらない。

移動できます

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

StartAnimation の外側の行 - または null であることを確認し、最初に追加するだけです。

于 2012-10-28T20:13:15.227 に答える