ソースコード
vb.net
Public Class MyTimerFrom
Private WithEvents timer As New Timer()
Private startTime As DateTime
Private remainingTime As TimeSpan
Private breakTime As Boolean = False
Private pausedTime As TimeSpan
Private breakStartTime As DateTime ' 休憩開始時刻を記録するための変数を追加
Public Sub New()
InitializeComponent()
' デフォルトの時間を25分に設定
txtMinutes.Text = "25"
' タイマーの間隔を1秒に設定
timer.Interval = 1000
' ボタンのテキストを初期化
btnStartStop.Text = "作業開始"
Me.TopMost = ckbTop.Checked
End Sub
Private Sub btnStartStop_Click(sender As Object, e As EventArgs) Handles btnStartStop.Click
If btnStartStop.Text = "作業開始" Or btnStartStop.Text = "作業再開" Then
Dim minutes As Integer
' 入力を検証
If Integer.TryParse(txtMinutes.Text, minutes) And minutes <= 99 Then
If btnStartStop.Text = "作業開始" Then
startTime = DateTime.Now.AddMinutes(minutes)
remainingTime = TimeSpan.FromMinutes(minutes)
Else
Dim aaa As Double = pausedTime.TotalMinutes
startTime = DateTime.Now.Add(TimeSpan.FromMinutes(aaa))
remainingTime = pausedTime
End If
timer.Start()
' ボタンのテキストを更新
btnStartStop.Text = "一時停止"
Else
MessageBox.Show("無効な入力です!数字を入力してください。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error)
End If
ElseIf btnStartStop.Text = "一時停止" Then
' タイマーを停止
timer.Stop()
pausedTime = remainingTime
' ボタンのテキストを更新
btnStartStop.Text = "作業再開"
ElseIf btnStartStop.Text = "復帰" Then
timer.Stop()
breakTime = False
' ボタンのテキストを更新
btnStartStop.Text = "作業開始"
lblTime.Text = "00:00"
End If
End Sub
'timer_Tickは、タイマーオブジェクトのTickイベントハンドラーです。このメソッドは、タイマーのIntervalプロパティで設定された間隔が経過するたびに自動的に呼び出されます。
'上記のコードスニペットでは、timer.Interval = 1000と設定されています。これは、タイマーが1秒ごと(1000ミリ秒ごと)にTickイベントを発生させ、それに応じてtimer_Tickメソッドが呼び出されることを意味します。
'したがって、timer_Tickメソッドは、タイマーが開始され(timer.Start())、そしてタイマーが動作している間は、1秒ごとに自動的に呼び出されます。
Private Sub timer_Tick(sender As Object, e As EventArgs) Handles timer.Tick
remainingTime -= TimeSpan.FromSeconds(1)
If remainingTime.TotalSeconds <= 0 And btnStartStop.Text <> "復帰" Then
timer.Stop()
If breakTime Then
' 休憩時間が終了したら、リセット
breakTime = False
btnStartStop.Text = "作業開始"
lblTime.Text = "00:00"
Else
' 作業時間が終了したら、休憩を開始
Dim form As New Form()
form.TopMost = True
form.Activate()
MessageBox.Show(form, "時間です!休憩を取ってください。", "タイマー", MessageBoxButtons.OK, MessageBoxIcon.Information)
' OKボタンを押下したら、下記を実行
breakStartTime = DateTime.Now ' 休憩開始時刻を記録 休憩が開始されるとすぐに経過時間が00:00からカウントアップし始めます
timer.Start()
breakTime = True
btnStartStop.Text = "復帰"
ckbTop.Checked = True
Me.TopMost = ckbTop.Checked
Me.Activate()
End If
Else
' ラベルを更新
If breakTime Then
' 休憩中の場合、休憩の経過時間を表示
Dim breakElapsedTime = DateTime.Now - breakStartTime
lblTime.Text = breakElapsedTime.ToString("mm\:ss")
Else
' 作業中の場合、残り時間を表示
lblTime.Text = remainingTime.ToString("mm\:ss")
End If
End If
End Sub
Private Sub CheckBox1_CheckedChanged(sender As Object, e As EventArgs) Handles ckbTop.CheckedChanged
Me.TopMost = ckbTop.Checked
End Sub
Private Sub btnReset_Click(sender As Object, e As EventArgs) Handles btnReset.Click
timer.Stop()
breakTime = False
' ボタンのテキストを更新
btnStartStop.Text = "作業開始"
lblTime.Text = "00:00"
End Sub
End Class
イメージ
起動
00:00の文字設定は「Broadway, 48pt」です。
ディフォルト設定:25分間とするが、変更可能となります。
作業開始押下
一時停止押下
作業再開押下
リセット押下
設定時間に到達
スクリーンの最前面に表示
OK押下
休憩時間をカウントアップする
※スクリーンの最前面表示を自動的に設定