vb.net - 如何使用小时、分钟和秒创建倒数计时器?
问题描述
我想知道如何修复我的倒数计时器,以便它以小时:分钟:秒显示时间?
目前,它只输出秒数,我不确定我哪里出错了。
任何帮助深表感谢。
代码:
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
解决方案
首先将要倒计时的时间分配给TimeSpan
字段。当您想按星倒计时时,请调用Start
aTimer
和 a Stopwatch
。在 的Tick
事件处理程序中Timer
,获取 的Elapsed
并Stopwatch
从原始时间中减去该时间以获得剩余时间为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
并使用正确的数据类型。
推荐阅读
- javascript - 在javascript中单击按钮后如何开始检查单击?
- julia - 将迭代器收集为二维数组
- php - 在AngularJS中创建像Symfony这样的自己的QUERY BUILDER是否安全
- android - 从 github 克隆项目后,gradle 项目同步失败
- c# - 如何使用 DJI SDK for Windows 从 mavic 2 获取 gps 数据?
- angular - Angular 8 - 在 HTML 模板中获取数据(从另一个数组中的数组中的数组)
- html - 如何删除卡片引导程序 4 中的额外空间
- javascript - 如何从单击的特定按钮中添加和删除 id?
- c# - 前台线程停止时后台线程不停止?
- reactjs - React Native expo CLI 错误:找不到模块“semver”