Как повторить таймер, который заканчивается окном сообщения? - PullRequest
0 голосов
/ 23 апреля 2020

Целью программы является напоминание пользователю делать перерыв каждые 30 минут. Таймер также позволяет пользователю вводить, как часто напоминать им. Обратный отсчет срабатывает только один раз, когда он достигает нуля, однако я хочу повторить процесс три раза. Кости изображения являются заполнителями. Извините за любые ошибки ладьи ie.

Вот код:

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    If lblHrs.Text = "0" And lblMin.Text = "0" And lblSec.Text = "0" Then
        dice1 = Int(Rnd() * 6 + 1)
        Select Case dice1

            Case "1"
                DiceRoll1.Image = My.Resources._1
            Case "2"
                DiceRoll1.Image = My.Resources._2
            Case "3"
                DiceRoll1.Image = My.Resources._3
            Case "4"
                DiceRoll1.Image = My.Resources._4
            Case "5"
                DiceRoll1.Image = My.Resources._5
            Case "6"
                DiceRoll1.Image = My.Resources._6

        End Select
        Timer1.Enabled = False

    End If

    Dim seconds As Double
    Dim minutes As Double
    Dim hours As Double

    Double.TryParse(lblSec.Text, seconds)
    Double.TryParse(lblMin.Text, minutes)
    Double.TryParse(lblHrs.Text, hours)

    If seconds = 0 And minutes <> 0 Then
        lblSec.Text = 59
        lblMin.Text = minutes - 1
    ElseIf seconds > 0 Then
        lblSec.Text = seconds - 1
    End If
    If minutes = 0 And hours <> 0 Then
        lblMin.Text = 59
        lblHrs.Text = hours - 1
    End If

    Dim Msg, Style, Title
    Msg = "Time to rest and exercise."    ' Define message.
    Style = vbOKOnly + vbInformation    ' Define buttons.
    Title = "Rest reminder"    ' Define title.

    ' Display message.
    MsgBox(Msg, Style, Title)

End Sub

1 Ответ

0 голосов
/ 23 апреля 2020

Это не полный ответ на ваш вопрос, но я хотел опубликовать кусок кода, чтобы комментарий не был хорошим вариантом. Этот класс поможет вам, если вы пытаетесь реализовать обратный отсчет:

Public Class CountdownStopwatch
    Inherits Stopwatch

    Public Property Period As TimeSpan

    Public ReadOnly Property Remaining As TimeSpan
        Get
            Dim timeRemaining = Period - Elapsed

            Return If(timeRemaining > TimeSpan.Zero, timeRemaining, TimeSpan.Zero)
        End Get
    End Property

    Public ReadOnly Property IsExpired As Boolean
        Get
            Return Elapsed >= Period
        End Get
    End Property

End Class

В основном это Stopwatch с дополнительными функциями обратного отсчета. Например, если вы хотите что-то сделать в течение 10 минут, вы можете сделать это:

myCountdownStopwatch.Period = TimeSpan.FromMinutes(10)
myCountDownStopwatch.Restart()

В событии Tick вашего Timer вы можете отобразить оставшееся время и запросить пользователя, когда время истекает так:

timeReaminingLabel.Text = myCountdownStopwatch.Remaining.ToString("m\:ss")

If myCountdownStopwatch.IsExpired Then
    myTimer.Stop()
    myCountdownStopwatch.Stop()
    myCountdownStopwatch.Reset()

    'Prompt user here.
End If
...