Начните с присвоения времени обратного отсчета полю TimeSpan
. Если вы хотите начать обратный отсчет, позвоните Start
на Timer
и 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
и используйте правильные типы данных.