2011-06-18 7 views
0

私はカウンターがあるテスト紙を作っています。次のフォームで同じカウントダウンタイマーを続ける方法は?

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

私はModuleにあなたのタイマーのためのすべてのコードを置く:ユーザーが[次へ]ボタンをクリックしたとして、私は私が、フォーム3にタイマーを使用

コードは..ですそれを続けなければなりません。これにより、アプリケーション内のどこにでもアクセスできます。 ElapsedTimerCompleteの2つの新しいイベントを追加して、複数のオブジェクトのフォームを追加すると、タイマーが刻々と変化するときに実行したいキーアクションをサブスクライブできます。

ここでは、どこからでもアクセス可能です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 

Form3_Load(...)にあなたがそうのようなタイマー設定することができます:あなたがしたい任意の形式で

AppTimer.Start(Date.Now.AddMinutes(60)) 

そしてをこれらのイベントが発生したときに何か新しい方法を2つ作成して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 

は、この情報がお役に立てば幸いです。

+0

@teena gupta - これは、あなたが望むものを達成するのに役立ちましたか? – aligray

0

タイマーを保持するメインmdiウィンドウを作成すると、親タイマーにアクセスできるサブウィンドウが表示されます。また、mdi自身でもすべてのテストペーパーフォームを閉じて、時間がかかります。

関連する問題