カウントダウンタイマーの処理
フォームと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コントロールは、時間以外にも日付を扱うことができるので、日数や月数、年数を扱うアプリケーションでも使うことが可能です。

