カウントダウンタイマーの処理
フォームとGcTimeSpan
コントロールのデザインができあがったら、カウントダウンタイマーの処理を作成します。
GcTimeSpan
コントロールに時間を設定するには、時・分・秒の各フィールドをクリックして、キーボードから数字を入力するだけです。
カウントダウンの処理は簡単で、設定したGcTimeSpan
コントロールのValue
プロパティの値から1秒ずつ差し引き、その値を再度GcTimeSpan
コントロールのValue
プロパティに設定していきます。この処理を、TimerコントロールのTickイベントハンドラで行います。
ただし、減算計算は、すべてTimeSpanオブジェクトを使って行います。
カウントダウンの計算
まず、TimeSpan型の変数を用意し、GcTimeSpan
コントロールの設定値を変数に格納します。
次に、TimeSpanクラスのコンストラクタを使って、1秒のTimeSpanオブジェクトを作成します。コンストラクタの引数は100ナノ秒です。ナノ秒は1秒の10の-9乗なので、引数には「10000000
」を設定し、コンストラクタを実行すると、1秒分のTimeSpanオブジェクトが作成されます。これを、現在の設定値を表すTimeSpanオブジェクトから差し引きます(演算子は「-
」を使うことができます)。
そして、その結果を再びValue
プロパティに設定します。この処理を1秒ごとに続けていくと、GcTimeSpan
コントロールのValue
プロパティの値は1秒ずつどんどん減っていきます。秒の値が「0
」になれば、自動的に分の値が1つ減って、秒の値が「59
」になります。
時と分の関係も同様です。特に、GcTimeSpan
コントロールを操作する必要はありません。Value
プロパティの値を1秒ずつ減らしていくだけで、時・分・秒の値がカウントダウンしていきます。
Imports GrapeCity.Win.Editors Public Class Form1 Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim val, newtime, minits, zero As TimeSpan val = GcTimeSpan1.Value minits = New TimeSpan(10000000) newtime = val - minits GcTimeSpan1.Value = newtime
using GrapeCity.Win.Editors; namespace mytimer_cs { public partial class Form1 : Form { private void timer1_Tick(object sender, EventArgs e) { TimeSpan val, newtime, minits, zero; val = (TimeSpan)gcTimeSpan1.Value; minits = new TimeSpan(10000000); newtime = val - minits; gcTimeSpan1.Value = newtime;
ラベルの点滅とカウントダウンの終了判断
同時に、Labelの文字色を変え点滅させます。そして、カウントダウンが終了したかどうかを判断します。これは、0秒のTimeSpanオブジェクトを作成し、GcTimeSpan
コントロールの現在のValue
プロパティと比較します。比較にはEquals
メソッドを使用します。
カウントが終了していれば、Timerコントロールを停止しLabelの点滅も終了させます。
'文字のブリンク If Label1.ForeColor = Color.Black Then Label1.ForeColor = Color.DeepPink Else Label1.ForeColor = Color.Black End If 'カウントダウンの終了判断 zero = New TimeSpan(0) If GcTimeSpan1.Value.Equals(zero) Then Timer1.Enabled = False Label1.ForeColor = Color.Black End If End Sub
//文字のブリンク if (label1.ForeColor == Color.Black) { label1.ForeColor = Color.DeepPink; } else { label1.ForeColor = Color.Black; } //カウントダウンの終了判断 zero = new TimeSpan(0); if (gcTimeSpan1.Value.Equals(zero)) { timer1.Enabled = false; label1.ForeColor = Color.Black; } }
タイマーの開始と一時停止、リセット処理
後は、タイマーの開始と一時停止、リセット処理を作成します。これらは、それぞれTimerコントロールのEnabled
プロパティを操作するだけです。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Timer1.Enabled = True End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click If sender.text = "一時停止" Then Timer1.Enabled = False Button2.Text = "再開" Button2.ForeColor = Color.Fuchsia Else Timer1.Enabled = True Button2.Text = "一時停止" Button2.ForeColor = Color.MediumBlue End If End Sub Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click GcTimeSpan1.Value = New TimeSpan(0) Timer1.Enabled = False Label1.ForeColor = Color.Black End Sub
private void button1_Click(object sender, EventArgs e) { timer1.Enabled = true; } private void button2_Click(object sender, EventArgs e) { if (button2.Text == "一時停止") { timer1.Enabled = false; button2.Text = "再開"; button2.ForeColor = Color.Fuchsia; } else { timer1.Enabled = true; button2.Text = "一時停止"; button2.ForeColor = Color.MediumBlue; } } private void button3_Click(object sender, EventArgs e) { gcTimeSpan1.Value = new TimeSpan(0); timer1.Enabled = false; label1.ForeColor = Color.Black; }
まとめ
GcTimeSpan
コントロールは、このように時間の長さなどの時間間隔を入力するのに便利なコントロールです。入力と表示を同時に行うことができ、1つのコントロールで処理できるので、コードもGUIも簡潔になります。また、時間の計算もTimeSpanクラスを使うので、計算が楽になります。
GcTimeSpan
コントロールは、時間以外にも日付を扱うことができるので、日数や月数、年数を扱うアプリケーションでも使うことが可能です。