1

私はC#とWPFを初めて使用します。私は次のことをしたい:

  1. 正確に5秒後に、いくつかのラベルを次々に表示します。

  2. 上記を終えた後、キャンバス上で図形を約10回移動し、各移動の間に5秒のタイムギャップを設定する必要があります。

  3. 上記を実行しますが、わずか2秒の時間差があります。

コードは次のとおりです。

    DispatcherTimer timer2 = new DispatcherTimer();
    float timerTime = 10;
    Label timerlabel = new Label();

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        lbl.Content = "test";
        startDisplay("hello!!");
        startDisplay("bye");
        Shapemove(1);
    }

    private void startDisplay(string st)
    {
        DispatcherTimer timer = new DispatcherTimer();
        timer.Interval = TimeSpan.FromSeconds(5);
        timer.Start();
        timer.Tick += (s, e) =>
        {
            lbl.Content = st;
        };
    }

    private void Shapemove(int i)
    {

        timer2.Interval = new TimeSpan(0, 0, 2);
        timer2.Tick += new EventHandler(timer2_Tick);
        timer2.Start();

    }

    void timer2_Tick(object sender, EventArgs e)
    {
        Random rand = new Random();

        if (timerTime > 0)
        {
            canvas1.Children.Remove(timerlabel);
            timerTime--;

            canvas1.Children.Add(timerlabel);
            timerlabel.FontSize = 20;
            timerlabel.Content = timerTime + "s";
            Canvas.SetLeft(rectangle1, rand.Next(640));
            Canvas.SetTop(rectangle1, rand.Next(480));
        }
        else
        {
            timer2.Stop();
        }
    }

しかし、上記の問題は次のとおりです。

  1. timerとtimer2の両方が同時に開始しました。

  2. ラベルが次々と表示されない-テストが表示され、5秒後にさようならが表示されます。こんにちはは表示されません!!

  3. 上記のShapemoveやstartDisplay関数のように、タイマーをリセットして関数として繰り返し呼び出す方法はありますか?

上記の問題の解決にご協力ください。

4

1 に答える 1

1

タイマーは使用しないでください。代わりにStoryBoardsを使用してください。

ストーリーボードでは、コントロールの可視性、不透明度、場所、...任意の(依存関係)プロパティを操作するアニメーションを配置できます。

このチュートリアルのアニメーションを参照してください

于 2012-05-23T06:50:12.200 に答える