0

私はC#でこれを持っています

private void counter_Tick(object sender, EventArgs e)
    {
        Time.Text = String.Format("{0:000}", Hour) + ":" + String.Format("{0:00}", Minute) + ":" + String.Format("{0:00}", Second);
        if (Second != 00)
        {
            Second = Second - 1;
        }
        else if (Minute != 00)
        {
            Minute = Minute - 1;
            Second = 59;
        }
        else if (Hour != 00)
        {
            Hour = Hour - 1;
            Minute = 59;
        }
        else
        {
            counter.Stop();
            Time.ForeColor = Color.Red;
        }
    }

どちらが機能しますが、分に追加するためにマイナス 1 時間になると、59 ではなく 00 分から 58 分になります

例えば。

From: 001:00:00
To:   000:58:59

そして、000:00:00 に達したときに何かを行うカウントダウン タイマーを作成するより良い方法はありますか?

4

4 に答える 4

10

さて、時が来たらどうなるか見てみましょう10:00:00

  1. 1時間を引く:09:00:00
  2. 分を59に設定します09:59:00

時間が1分ずれていることに気付いた場合(10:00:00 - 09:59:00 = 00:01:00)。解決策は、秒も59に設定することです。これで、コードはです。

// ...
else if (Hour != 00)
{
    Hour = Hour - 1;
    Minute = 59;
    Second = 59;
}
// ...
于 2012-05-15T11:19:02.057 に答える
2

時間を減算するために、標準の .Net クラスを使用できます。

private TimeSpan timeSpan;
private TimeSpan oneSecond = new TimeSpan(0, 0, 1);

private void timer_Elapsed(object sender, ElapsedEventArgs e)
{
    Time.Text = timeSpan.ToString();

    if (timeSpan == TimeSpan.Zero)
    {
        Time.ForeColor = Color.Red;
        timer.Stop();
        return;
    }

    timeSpan -= oneSecond;
}

タイマーを開始するときにタイムスパンを初期化します (私は System.Timers.Timer を使用しました):

timeSpan = new TimeSpan(1, 0, 0);
Timer timer = new Timer(1000);
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.Start();
于 2012-05-15T11:36:18.280 に答える
1

Secondまた、に設定する必要があります59。それ以外の場合、タイマーが再び作動すると、タイマーはすぐに切り替わり、(すでに)1つelse if (Minute != 00)減ります。Minute59

于 2012-05-15T11:19:17.463 に答える
0
DateTime start;
DateTime final;

private void start()
{
    start = DateTime.Now;
    final = start + TimeSpan.FromHours(1);
}

private void counter_Tick(object sender, EventArgs e)
{
    start = DateTime.Now;
    Time.Text = (final-start).Hours.ToString() + ":" + (final-start).Minutes.ToString() + ":" + (final-start).Seconds.ToString();    
    if (final == start)
    {
        //final code
    }        
}
于 2012-05-15T11:26:37.967 に答える