Как сделать так, чтобы секундомер (таймер) запускался с 00:00:00 после остановки и повторного запуска? - PullRequest
0 голосов
/ 20 января 2019

Итак, я делаю программу для секундомера, и у меня возникает небольшая проблема, когда она останавливается и запускается.

Это ситуация, когда я нажимаю «StartButton», а затем нажимаю «StopButton», нопосле повторного нажатия кнопки «StartButton» он начинает отсчет с уже рассчитанного времени.

Функция таймера:

int i = 0;
private void timer1_Tick(object sender, EventArgs e)
{

    TimeSpan time = TimeSpan.FromSeconds(i);
    textBox1.Text = time.ToString(@"hh\:mm\:ss");
    i++;
}

Функция StopButton:

private void button4_Click(object sender, EventArgs e)
{
    button3.Visible = true;
    button4.Visible = false;
    timer1.Stop();
    timer1.Enabled = false;
    textBox1.Text = "00:00:00";
}

Функция StartButton:

 private void button3_Click(object sender, EventArgs e)
{
    button4.Visible = true;
    button3.Visible = false;
    timer1.Enabled = false;
    timer1.Start();
        textBox1.Text = "00:00:00";
}

Я пытался просто заставить "textBox1" написать "00:00:00", но он не работает вообще.

(PS Я плох в C #).

Ответы [ 2 ]

0 голосов
/ 20 января 2019

Я бы также добавил поле со стартовым значением:

private DateTime _timeStart = DateTime.Now; 

Запуск / перезапуск:

_timeStart = DateTime.Now; 
timer1.Start();

Отображение:

TimeSpan time = (DateTime.Now - _timeStart).TotalSeconds;
textBox1.Text ...

И... Если вам нужно приостановить таймер.

Я бы также добавил и использовал эти поля для обработки приостановленного времени:

private DateTime _timePauseStart = DateTime.Now;
private TimeSpan _timeSpanPaused;

Begin Paused:

timer1.Stop();
_timePauseStart = DateTime.Now;

Конец приостановлен:

_timeSpanPaused += DateTime.Now - _timePauseStart;
timer1.Start();

Показано:

TimeSpan time = (DateTime.Now - _timeStart - timeSpanPaused).TotalSeconds;
textBox1.Text ...
0 голосов
/ 20 января 2019

Я просто понимаю ваш вопрос.Таймер запускается с 0 каждый раз, когда вы останавливаетесь и запускаете его.

Рекомендуется использовать класс Stopwatch.С помощью секундомера вы всегда можете продолжить, где он находится в режиме паузы.

Чтобы перезапустить секундомер, используйте

sw.Reset();
sw.Start();

или

sw.Restart();

Чтобы продолжить, где вы оставили, используйте

timer1.Stop();
timer1.Start();
...