VB.NET2010中的倒计时?
我正在尝试使用计时器从我选择的指定时间倒计时,时间使用格式MM:SS分为分钟和秒,然后在时间达到00:00时停止 到目前为止,我已经使用了之前在这里找到的答案,并根据我所知对其进行了修改,以进行倒计时,尽管我遇到了一个障碍,当计时器成功开始倒计时时,它会延迟并且在倒计时时不同步 例如,从120秒开始倒计时VB.NET2010中的倒计时?,vb.net,timer,countdowntimer,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> 0
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
当倒计时达到00或30秒时,它会错误地显示剩余的分钟数,并且无法理解或想出如何解决它
这是我的计数计时器代码
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
这是我的时间格式化函数代码
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
这是我的表单加载代码
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
我已经准备好了
Dim SetTime As Integer
在我的公共类的顶部,这样我就可以在倒计时中输入指定的时间。这可能是一件非常愚蠢的事情,我不知道这是什么
非常感谢您的帮助,请记住,我是一名编程初学者,很容易被大量代码所迷惑。(我几乎无法理解它的功能。)
谢谢你的帮助 取一个倒计时计时器的测试样本。进行所需的更改(例如时间格式) 次新 玩这个:
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
试试这个
'the amount of time to countdown from
Dim countDownFrom As New TimeSpan(0, 0, 10) 'ten seconds
'a Stopwatch to track how long running
Dim stpw As New Stopwatch
Private Sub Button1_Click(sender As Object, _
e As EventArgs) Handles Button1.Click
Timer1.Interval = 250 'how often to update display
Timer1.Start() 'start the display updater
stpw.Reset() 'restart the stopwatch
stpw.Start()
'or depending on version of .Net
'stpw.Restart
End Sub
Private Sub Timer1_Tick(sender As Object, _
e As EventArgs) Handles Timer1.Tick
If stpw.Elapsed <= countDownFrom Then
Dim toGo As TimeSpan = countDownFrom - stpw.Elapsed
lblTime.Text = String.Format("{0:00}:{1:00}:{2:00}", toGo.Hours, toGo.Minutes, toGo.Seconds)
Else
Timer1.Stop()
stpw.Stop()
End If
End Sub
'从开始倒计时的时间量
从新时间跨度(0,0,10)'10秒开始变暗倒计时
“一块秒表,用来记录你跑了多长时间
调暗stpw作为新秒表
专用子按钮1\u单击(发件人作为对象_
e作为事件参数)处理按钮1。单击
Timer1.Interval=250'更新显示的频率
Timer1.Start()'启动显示更新程序
stpw.Reset()'重新启动秒表
stpw.Start()
'或取决于.Net的版本
'stpw.Restart
端接头
专用子计时器1_刻度(发送方作为对象_
e作为EventArgs)处理计时器1。勾选
如果stpw.appead您在原始代码中的错误是您错误地使用了MOD运算符
'Minutes
Min = ((Time - Sec) / 60) Mod 60
'Seconds
Sec = Time Mod 60
在2:00你会看到2:00,因为:
Min = ((120-00) / 60 ) MOD 60 = 2 MOD 60 = 2
Sec = 120 MOD 60 = 0
在1:59你看到2:59因为
Min = (119 / 60) MOD 60 = 1.98 MOD 60 = 1.98 = 2
Sec = 119 MOD 60 = 59
31秒后,你的分钟数从2变为1,因为
Min = (89 / 60) MOD 60 = 1.48 MOD 60 = 1.48 = 1
更简单地说:
Format((Math.Floor(lSeconds / 60)), "00") & ":" & Format((lSeconds Mod 60), "00")
您假设计时器滴答声正好发生在指定的时间间隔上。没有。我想如果你搜索倒计时计时器和VisualBasic,你会找到很多解决方案。我已经使用不同的时间量进行了测试,所有测试都在我指定的时间间隔内进行。当秒从00滴答到59时,分钟不会减少1,当秒从30滴答到29时,分钟会减少1。刚刚测试了这个倒计时计时器,它真是太棒了!工作起来很有魅力,没有任何麻烦。不幸的是,我用这个方法犯了更多的错误,尽管我确实有一个很好的破解方法,并尽我最大的努力修改它以使其工作。不过,谢谢你的帮助,这让我更好地了解了它的工作原理DIfdtTimer.Interval=100
?提到用户必须导入系统,您没有包括秒表类型的示例。Diagnotics@htm11h-除非用户更改了默认系统。不需要显式导入诊断。顺便说一句,这已经有一年多的历史了。请不要只发布代码作为答案,还要解释你的代码的作用以及它是如何解决问题的。带有解释的答案通常更有帮助,质量更好,更容易吸引选票
Format((Math.Floor(lSeconds / 60)), "00") & ":" & Format((lSeconds Mod 60), "00")
Public SetTime As Integer = 0
Public Min As Integer = 0
Public Sec As Integer = 0
Public Decimaal As Decimal = 0
Public Function FormatTime(ByVal Time As Integer) As String
'Minutes
Min = Fix(SetTime / 60000)
'Decimaal
Decimaal = (SetTime / 60000) - Min
'Seconden
Sec = Fix(Decimaal * 60)
Return Format(Min, "00") & ":" & Format(Sec, "00")
End Function
Private Sub tmrCountdown_Tick(sender As Object, e As EventArgs) Handles tmrCountdown.Tick
SetTime = SetTime - 1000
lblCountdown.Text = FormatTime(SetTime)
tmrCountdown.Enabled = True
If SetTime = 0 Then
tmrCountdown.Enabled = False
End If
End Sub