如何使用小时,分钟和秒创建倒数计时器?

问题描述 投票:0回答:1

我想知道如何修复我的倒数计时器,以便以小时显示时间:分钟:秒?

目前,它只输出秒数,我不知道我哪里出错了。 任何帮助深表感谢。

码:

Public Class Form1
    Dim TargetDT As DateTime
    Dim fields() As String
    Dim Days, Hours, minutes, seconds, milliseconds As String

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        fields = Split(TextBox1.Text, ":")
        Hours = fields(0)
        minutes = fields(1)
        seconds = fields(2)

        Dim CountDownFrom As TimeSpan = TimeSpan.FromHours(Hours).FromMinutes(minutes).FromSeconds(seconds)
        Timer1.Interval = 1000
        TargetDT = DateTime.Now.Add(CountDownFrom)
        Timer1.Enabled = True
    End Sub

    Private Sub Timer1_Tick(sender As Object, e As System.EventArgs) Handles Timer1.Tick
        Dim ts As TimeSpan = TargetDT.Subtract(DateTime.Now)
        If ts.TotalMilliseconds > 0 Then
            Con1Time.Text = ts.ToString("hh\:mm\:ss")
        Else
            Con1Time.Text = "0:00:00"
            Timer1.Stop()
            MessageBox.Show("Done")
        End If
    End Sub
End Class
vb.net countdown timespan
1个回答
0
投票

首先将您要倒计时的时间分配给TimeSpan字段。当你想要倒计时时,请在StartTimer上调用Stopwatch。在TickTimer事件处理程序中,获取ElapsedStopwatch并从原始时间减去该值以获得剩余时间作为TimeSpan。然后,您可以格式化并显示它。当剩余时间达到零时,倒计时已过期。

Private countDownTime As TimeSpan
Private countDownWatch As Stopwatch

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    countDownTime = TimeSpan.FromMinutes(30)
    countDownWatch = Stopwatch.StartNew()
    Timer1.Start()
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    Dim timeRemaining = countDownTime - countDownWatch.Elapsed

    If timeRemaining < TimeSpan.Zero Then
        timeRemaining = TimeSpan.Zero
    End If

    Label1.Text = timeRemaining.ToString("hh\:mm\:ss")

    If timeRemaining = TimeSpan.Zero Then
        Timer1.Stop()

        MessageBox.Show("Countdown complete")
    End If
End Sub

那就是说,你的具体问题在这里:

Dim CountDownFrom As TimeSpan = TimeSpan.FromHours(Hours).FromMinutes(minutes).FromSeconds(seconds)

这不符合你的想法。你只得到了FromSeconds电话的结果。如果你想用小时,分钟和秒创建一个TimeSpan,那么调用相应的构造函数

Dim CountDownFrom As TimeSpan = New TimeSpan(Hours, minutes, seconds)

当然,这些论点应该是Integer值,而不是Strings。转Option Strict On并使用正确的数据类型。

© www.soinside.com 2019 - 2024. All rights reserved.