Секундомер с For L oop продолжает превышать лимит и счетчик кажется сломанным - PullRequest
0 голосов
/ 28 апреля 2020

В настоящее время предпринимается попытка очень простого частного проекта сделать таймер обратного отсчета после того, как пользователь нажмет «старт». В идеале часы должны отсчитывать до нуля количество раз, равное TotalLap. Предполагается также удалить количество времени (1 минута x текущий круг) из таймера, прежде чем он снова запустится.

Я пробовал вариант while l oop, а теперь значение For l oop. В обоих случаях то, что я называю «счетчиком» с меткой «CurrentLap», достигает максимального значения плюс 1 (я добавил метку, чтобы показать мне значение CurrentLap, и оно всегда на 1 выше, чем TotalLap после первого запуска, пропуская все остальные круги).

Итак, мои проблемы следующие: 1) Мне еще не удалось найти подходящее место для установки команды останова для моего таймера. 2) CurrentLap идет от 0 до 4 (согласно моей метке для это)

Ниже я включу свой код, который будет включать закомментированные предыдущие попытки. Пожалуйста, имейте в виду, что я относительно неопытен в программировании и очень мало знаю терминологию (изучаю новые навыки!). Заранее благодарим.

Редактировать: В настоящее время для ускорения тестирования установлено время .25, обычно это целочисленное значение.

Public Class Form1
Dim CurrentLap As Integer = 0
Dim TotalLap As Integer = 4
Dim Time As Decimal = 0.25
'Dim TimeReduction As Decimal = 0.25
'Dim StartTime As Decimal = (Time - TimeReduction)

Private TargetDT As DateTime

Private CountDownFrom As TimeSpan = TimeSpan.FromMinutes(Time)


Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

End Sub

Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click
    tmrCountdown.Interval = 1000
    TargetDT = DateTime.Now.Add(CountDownFrom)
    tmrCountdown.Start()
End Sub

Private Sub tmrCountdown_Tick(sender As Object, e As System.EventArgs) Handles tmrCountdown.Tick
    Dim ts As TimeSpan = TargetDT.Subtract(DateTime.Now)

    If ts.TotalMilliseconds > 0 Then
        lblTime.Text = ts.ToString("mm\:ss")
    Else
        lblTime.Text = "00:00"
        tmrCountdown.Dispose()
        CurrentLap = CurrentLap + 1


        For CurrentLap = 0 To TotalLap Step 1
            tmrCountdown.Start()
            TargetDT = DateTime.Now.Add(CountDownFrom)

            If CurrentLap = TotalLap Then Exit For


        Next CurrentLap


        'While CurrentLap < TotalLap
        'tmrCountdown.Start()
        'TargetDT = DateTime.Now.Add(CountDownFrom)
        'CurrentLap = CurrentLap + 1
        'End While

        'If CurrentLap < TotalLap Then
        'CurrentLap = CurrentLap + 1
        'TargetDT = DateTime.Now.Add(CountDownFrom)
        'tmrCountdown.Start()

        'Else
        'tmrCountdown.Stop()
        'MsgBox("Race Over")
        'End If

    End If
    lblCurrentLap.Text = CurrentLap.ToString("")


End Sub

Конечный класс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...