デジタル時計を作っています。
VB初心者です。宜しくお願いします。
このデジタル時計はformが開かれると午前6:00から現在の時刻(たとえば11:00)の時間まで早送りされ、現在の時間まで到達したら通常のタイマーの動きになるようにしたいと思います。デジタル時計までは何とか動くようにしました。
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
'現在の日付時刻をローカルから取得する
Dim dtNow As DateTime = DateTime.Now
'取得した時刻をLabel.TEXTにセットする
Me.Label1.Text = Format(dtNow, "HH:mm:ss")
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Interval = 1000
Me.Timer1.Start()
End Sub
上記のソースにどのようにてを加えればいいかわかりません。宜しくお願いします。
こういう感じですかねえ
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
'現在の日付時刻をローカルから取得する
Dim dtNow As DateTime = DateTime.Now
Select Case Me.Timer1.Interval
Case 10 '早送り(巻き戻し)?の場合の処理
Static flag1st As Boolean = True
Static dtLast As DateTime
Static intStep As Integer
If flag1st Then '初回は早送り・巻き戻し・同じ時刻かをチェック
flag1st = False
dtLast = DateTime.Today.Date.AddHours(6)
intStep = Math.Sign(DateTime.Compare(dtNow, dtLast)) * 3 '3分刻みで早送り(巻き戻し)
End If
Select Case intStep
Case Is > 0 '早送りの場合
dtLast = dtLast.AddMinutes(intStep)
If dtLast > dtNow Then '早送りし過ぎの場合
dtLast = dtNow
Me.Timer1.Interval = 1000
End If
Case Is < 0 '巻き戻しの場合
dtLast = dtLast.AddMinutes(intStep)
If dtLast < dtNow Then '巻き戻し過ぎの場合
dtLast = dtNow
Me.Timer1.Interval = 1000
End If
Case Else '今の時刻と同じなのでタイマーを1000MSに間隔に変更する
Me.Timer1.Interval = 1000
End Select
Me.Label1.Text = Format(dtLast, "HH:mm:ss")
Me.Label1.Refresh()
Case 1000 '早送りが終わった一秒刻みの処理
'取得した時刻をLabel.TEXTにセットする
Me.Label1.Text = Format(dtNow, "HH:mm:ss")
End Select
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Label1.Text = Format(DateTime.Today.Date.AddHours(6), "HH:mm:ss") '当日6時を初期値として表示
Timer1.Interval = 10
End Sub
Private Sub Form1_Shown(sender As Object, e As System.EventArgs) Handles Me.Shown
'formが最初に表示された時からスタートする
Static flag1st As Boolean = True
If flag1st Then
flag1st = False
Me.Timer1.Start()
End If
End Sub
望んだ回答以上でびっくりしました。
Timer1_TickとForm1_Loadをこうやって使うんですね。タイマーというものの勉強になります。
Timer1_TickとForm1_Loadの関係がわからなかったら、Select Case をForm1_Loadで使って迷宮入りするところでした。
ありがとうございました。
それにしても本当にすごいですね。