首页 > 解决方案 > 带有 For 循环的停止时钟继续超过限制并且计数器似乎坏了

问题描述

目前正在尝试一个非常简单的私人项目,在用户点击“开始”后让秒表显示倒计时。理想情况下,时钟旨在倒计时到零的次数等于 TotalLap。它还应该在计时器再次开始之前从计时器中删除一定量的时间(1 分钟 x 当前圈数)。

我尝试了一个 While 循环,现在又尝试了一个 For 循环。在这两种情况下,我称之为“计数器”的标记为“CurrentLap”的都会达到最大值加 1(我添加了一个标签来显示 CurrentLap 值,并且在第一次运行后它总是比 TotalLap 高 1,跳过所有其他圈)。

所以我的问题如下: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

结束类

标签: vb.net

解决方案


推荐阅读