SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(InputMan)

カウントダウンタイマー機能を持った.NETアプリケーションを作る

InputMan for Windows Forms 5.0Jのタイムスパンコントロールを使ったアプリケーションの作成

  • このエントリーをはてなブックマークに追加

カウントダウンタイマーの処理

 フォームと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秒ずつ減らしていくだけで、時・分・秒の値がカウントダウンしていきます。

Visual Basic
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
C#
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の点滅も終了させます。

Visual Basic
    '文字のブリンク
    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
C#
    //文字のブリンク
    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プロパティを操作するだけです。

Visual Basic
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
C#
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コントロールは、時間以外にも日付を扱うことができるので、日数や月数、年数を扱うアプリケーションでも使うことが可能です。

製品情報

修正履歴

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
ComponentZine(InputMan)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3865 2009/05/24 12:33

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング