如何以下一种形式继续相同的倒数计时器?

问题描述

| 我正在做一个有计数器的试纸。当用户单击下一步按钮时,我必须继续操作。 我在表格3上用于计时器的代码是:
Public Class Form3
    Inherits System.Windows.Forms.Form

    Private alarmTime As Date

    Private Sub Form3_Load(ByVal sender As System.Object,_
        ByVal e As System.EventArgs) Handles MyBase.Load

    Me.alarmTime = Date.Now.AddMinutes(60)
    Me.Timer1.Start()


End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object,_
    ByVal e As System.EventArgs) Handles Timer1.Tick

    If alarmTime < Date.Now Then
        Me.Timer1.Stop()
        MessageBox.Show(\"Time\'s up.\")
    Else
        Dim remainingTime As TimeSpan = Me.alarmTime.Subtract(Date.Now)

        Me.Label6.Text = String.Format(\"{0}:{1:d2}:{2:d2}\",_
                                       remainingTime.Hours,_
                                       remainingTime.Minutes,_
                                       remainingTime.Seconds)
    End If

End Sub

Private Sub Button1_Click(ByVal sender As System.Object,_
    ByVal e As System.EventArgs) Handles Button1.Click

    Dim frmDialogue As New Form8

    frmDialogue.ShowDialog()

End Sub
    

解决方法

        我会将您计时器的所有代码放入ѭ1中。这样,您可以在应用程序中的任何位置访问它。我还将添加两个新事件
Elapsed
TimerComplete
,以便多个对象和表单可以订阅希望在计时器计时时执行的关键操作。 这是可从任何地方访问的
AppTimer
模块:
Module AppTimer
    Private alarmTime As Date
    Private WithEvents timer As Timer = New Timer()

    Public Sub Start(ByVal time as Date)
        alarmTime = time
        timer.Start()
    End Sub

    Public Sub TimerTick(ByVal sender As Object,ByVal e as EventArgs)
        Handles timer.Tick

        If alarmTime < Date.Now Then
            timer.Stop()
            RaiseEvent TimerComplete(\"Time\'s up.\")
        Else
            Dim remainingTime As Timespan = alarmTime.Subtract(Date.Now)
            RaiseEvent Elapsed(remainingTime)
        End If
    End Sub

    \'This will fire when the duration of the timer has elapsed
    Public Event TimerComplete As Action(Of String)

    \'This will fire each time the timer ticks unless it\'s finished
    Public Event Elapsed As Action(Of Timespan)
End Module
现在在ѭ6中,您可以像这样设置计时器:
    AppTimer.Start(Date.Now.AddMinutes(60))
然后,当这些事件触发时,您希望以任何形式执行一些操作,创建两个新方法并将其与
AddHandler
挂钩:
AddHandler AppTimer.Elapsed,AddressOf HandleElapsed
AddHandler AppTimer.TimerComplete,AddressOf HandleComplete

Private Sub HandleElapsed(ByVal remainingTime As Timespan)
    Me.Label6.Text = String.Format(\"{0}:{1:d2}:{2:d2}\",_
                                   remainingTime.Hours,_
                                   remainingTime.Minutes,_
                                   remainingTime.Seconds)
End Sub

Private Sub HandleComplete(ByVal message As String)
    MessageBox.Show(message)
End Sub
还值得注意的是,您可以使用
lambdas
挂接事件:
AddHandler AppTimer.Elapsed,Sub(remainingTime)
                                 String.Format(\"{0}:{1:d2}:{2:d2}\",_
                                     remainingTime.Hours,_
                                     remainingTime.Minutes,_
                                     remainingTime.Seconds) 
                             End Sub
希望这可以帮助。     ,        您可以创建一个主mdi窗口来保存计时器,并且其中将有子窗口可以访问父计时器,甚至mdi本身可以关闭所有测试纸表格并在时间到时显示msg框以显示时间。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...