Timerのカウントダウンのしかたを教えて下さい!
カウントダウンさせるプログラムを作っているのですが、「Timer」を使用して「1秒毎」にカウントダウンさせていきたいんですけど「テキスト」内の数値を[0・・59・・58・・」の順にカウントさせることは可能ですか?
現時点では「Timer」を設置してボタン操作でカウントを始めるプログラムを書きましたが、どうも計算がうまくいきません。
Public Class Form1
Private SecCount As Integer ' 秒数をカウントする整数
Private Count As Integer
Private WaitSecond As Integer ' タイマーの停止時間を秒単位で記憶する変数
' [START]ボタンを押した時に実行する処理
Private Sub DoConvert(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
Dim WorkingMinute, WorkingSecond As Integer
Dim WorkingHour As Integer
Dim Smhplass As Integer ' 時間をカウントする変数
' 入力された時間と分と秒を数値に変換
WorkingHour = numHour.Value
WorkingMinute = numMinute.Value
WorkingSecond = CInt(txtSecond.Text)
' 指定されたタイマーを秒単位で記憶
WaitSecond = WorkingHour * 60 + WorkingMinute * 60 + WorkingSecond
' 指定されたタイマー停止時間が 0 秒のときは開始処理をキャンセル
If WaitSecond = 0 Then
Exit Sub
End If
' 秒数のカウントと表示をテキスト内の表示にに初期化
SecCount = WorkingHour + WorkingMinute
Count = 0
' カウンターを処理する変数
Smhplass = WorkingSecond + WorkingMinute + WorkingHour
' numからテキストに表示
txtHour.Text = WorkingHour.ToString()
txtMinute.Text = WorkingMinute.ToString()
' [START]ボタンを無効化
btnStart.Enabled = False
' タイマーを開始
Timer1.Start()
' 表示画像の変更
lblStandby.Text = "START"
End Sub
' 指定したミリ秒毎に実行される処理
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Dim Smhplass As Integer ' 時間をカウントする変数
Dim WorkingHour, WorkingMinute, WorkingSecond As Integer
' テキストをIntに変える変数
WorkingHour = CInt(txtHour.Text)
WorkingMinute = CInt(txtMinute.Text)
WorkingSecond = CInt(txtSecond.Text)
' カウンターを処理する変数
Smhplass = WorkingHour - WorkingMinute - WorkingSecond
' タイマーカウント行う処理
SecCount = SecCount - 1
Smhplass = SecCount
If SecCount = WaitSecond Then
' 表示画像を変更
lblStandby.Text = "STANDBY"
' タイマーを停止
Timer1.Stop()
' [START] ボタンを有効化
btnStart.Enabled = True
End If
End Sub
End Class
上記がボタンを押した時の処理とタイマーイベント(Tick)が行う処理の記述のつもりなのですが、ここからどういう計算方式で「0・・59・・58」の順に減らしていくのかわかりません(ι・_・)
デザインではテキストが「時間・分・秒」の順に表示される様に設定しています、そこに表示させたテキストの「分・秒」を先ほどの計算式で逆算していきたいです。
たとえば1時間に設定したら「秒」のカウントは「59」から始まり「分」はそれに伴って秒が60カウントをした「1分」ずつ減っていくような感じです。
Name設定を変えているのでボタンやテキストの表記が多少変わっていて読みにくいかもしれませんが「ボタン」なら「btn~」、テキストなら「txt~」で名前をつけています。
長くなってしまいましたが、もしいい方法があれば是非ご伝授の方よろしくお願いします。
お礼
ありがとうございます! java.util.Timer のことです。 現在はざっくりとですが以下のような処理としています。 cancel() でタイマーを止めるのは分かるのですが cancel() せずに再 schedule できないものかとの質問でした。 MyTimer.cancel(); MyTimer = new Timer(); DisDev = new DisconnectDevice( MyTimer ); DisDev.Thread = this; MyTimer.schedule(DisDev, delayTime);