在 VB.Net 2010 中倒计时的计时器?

Hol*_*ble 2 vb.net timer countdowntimer

我正在尝试使用计时器从我选择的指定时间开始倒计时,使用格式MM:SS将时间分为分钟和秒,然后在时间到达00:00时停止。

到目前为止,我已经使用了在此处找到的先前答案,并根据我的知识对它进行了倒计时修改,尽管我遇到了一个障碍,其中当计时器成功开始倒计时时,它会延迟并且不同步倒计时分钟。

例如,从 120 秒开始倒计时;

02:00> 02:59> 02:58> 02:57> 02:56> 02:55

然后在同样的测试下继续倒计时90秒;

02:30> 01:29> 01:28> 01:27> 01:26> 01:25

当倒计时到达0030秒时,它会错误地显示剩余的分钟数并且无法理解或弄清楚如何解决它。

这是我的计数计时器代码;

Private Sub tmrCountdown_Tick(ByVal sender As System.Object, _
                              ByVal e As System.EventArgs) _
                          Handles tmrCountdown.Tick

    SetTime = SetTime - 1
    lblTime.Text = FormatTime(SetTime)

    If SetTime = 0 Then
        tmrCountdown.Enabled = False
    End If

End Sub
Run Code Online (Sandbox Code Playgroud)

这是我用于格式化时间的函数代码;

Public Function FormatTime(ByVal Time As Integer) As String
    Dim Min As Integer
    Dim Sec As Integer

    'Minutes
    Min = ((Time - Sec) / 60) Mod 60

    'Seconds
    Sec = Time Mod 60

    Return Format(Min, "00") & ":" & Format(Sec, "00")

End Function
Run Code Online (Sandbox Code Playgroud)

这是我的表单加载代码;

Private Sub frmSinglePlayer_Load(ByVal sender As System.Object, _
                                 ByVal e As System.EventArgs) _
                             Handles MyBase.Load

    'Setting the time.
    SetTime = 120
    lblTime.Text = FormatTime(SetTime)
    tmrCountdown.Enabled = True

End Sub
Run Code Online (Sandbox Code Playgroud)

我已经设置了;

    Dim SetTime As Integer
Run Code Online (Sandbox Code Playgroud)

在我的公共类的顶部,所以我可以将指定的时间输入到倒数计时器中。这可能是非常愚蠢的事情,我无法弄清楚它是什么。

非常感谢任何帮助,请记住,我是编程初学者,很容易与大量代码混淆。(我几乎无法理解函数的原貌。)

感谢您的帮助!

Idl*_*ind 5

玩这个:

Public Class frmSinglePlayer

    Private TargetDT As DateTime
    Private CountDownFrom As TimeSpan = TimeSpan.FromMinutes(3)

    Private Sub frmSinglePlayer_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        tmrCountdown.Interval = 500
        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.Stop()
            MessageBox.Show("Done")
        End If
    End Sub

End Class
Run Code Online (Sandbox Code Playgroud)