1

1秒から2分までの経過時間を示すテキストボックスを含むフォームがあります。正常に動作しています。ただし、ゲームのラウンドが終了したときにタイマーを停止し、別のフォームのボタンがクリックされたときにタイマーを再開する必要があります。したがって_timer.Stop()、timer_tick イベント ハンドラーとForm 2_timer.Start()のボタンイベント ハンドラーに含まれています。click

私の問題は、タイマーが、0:00からではなく、他のフォームのボタンを押すまでの経過時間から開始されることです。何か案は?

これは、タイマーに関するコードです。

 private DateTime _myDateTime;
 private System.Windows.Forms.Timer _timer;
 private DateTime newDate;

 public Tournament()
 {
     _timer = new System.Windows.Forms.Timer();
     _timer.Interval = 1000;
     _timer.Tick += Timer_Tick;
     _myDateTime = DateTime.Now;

     newDate = new DateTime();
     newDate = newDate.AddMinutes(2.00);
     _timer.Start();
     InitializeComponent();
 }

 void Timer_Tick(object sender, EventArgs e)
 {
        var diff = DateTime.Now.Subtract(_myDateTime);
        this.textBox1.Text = diff.ToString(@"mm\:ss");

        DateTime dt = Convert.ToDateTime(diff.ToString());

        if (newDate.Minute == dt.Minute)
        {
           _timer.Stop();
           _myDateTime = DateTime.Now;

           displayPointsOrResults();

           this.textBox1.Text = diff.ToString(@"mm\:ss");  
        }
  }

displayPointsOrResults()私は別のフォームのインスタンスを作成しているのでPoints()、ポイントフォームにはボタン1があり、タイマーに関係のない他のものとは別に、イベントハンドラーにこれがあります: tournament.Timer1.Start();

トーナメントクラスからタイマーを取得して、もう一度開始します。

私は何を間違っていますか?

4

3 に答える 3

2

私の問題は、タイマーが、0:00からではなく、他のフォームのボタンを押すまでの経過時間から開始されることです。

そうです、タイマー_myDateTime停止するとリセットされます。

_timer.Stop();
_myDateTime = DateTime.Now;

その 2 行目を再起動するポイントに移動する必要があります。

あなたのタイトルが間違っていることに注意してください - タイマーはそれ以上刻んでいないという点で、実際停止しています. タイマーが実際にタイミングを実行しているわけではありません。これは、イベント ハンドラーを定期的に呼び出す方法にすぎません。問題は、イベント ハンドラー自体にあります。

于 2012-12-07T11:14:19.730 に答える
1

ああ、グローバル vars、一緒に祝福と呪い。ボタンを押すと、DateTime.Now に
リセットされましたか?_myDateTime

于 2012-12-07T11:15:01.087 に答える
0

タイマーを停止して再開するときは、日時を今に設定する必要があります。

_myDateTime = DateTime.Now;
于 2012-12-07T11:16:58.787 に答える