タブレットPC開発入門 C#編 第15回 ディジタル時計を作る その1−Timerを使う

このページをDeliciousに追加 このページをはてなブックマークに追加 このページをYahoo!ブックマークに追加

2002年11月20日(水)版

タブレットPC開発入門 C#編 第15回 ディジタル時計を作る その1−Timerを使う

デスクトップ、ノートブックから、第3のスタイルへ


■ついに実用的なアプリケーション

 ここまでこの連載を読み続けてきたあなたは、正直言ってもう努力次第でどんなアプリケーションでも作れるだろう。ここからはより実践的な内容になる。今回から3回に渡ってディジタル時計を作ってみよう。

■Timerコントロールを使う

 ユーザーからの入力によらず、アプリケーション内部で周期的に処理を行いたいことがある。例えば、時を刻む処理等はその最たるものである。このような処理のためにC#にはTimerが用意されている。Timerを使うにはまずツールボックスでTimerを選択し、Formに貼り付ける必要がある。

 新たに「Windows アプリケーション」を作成し、プロジェクト名は"Clock"とする。Formが表示されたらTimerを貼り付ける。ここで従来のVisual Basicに慣れた方はおやと思うかもしれない。

 C#ではForm上に実行時不可視のコントロールを貼り付けても、デザイン時のForm上には表示されずにデザイン画面の下部に羅列される。これは小さなことだが歓迎すべき改善ポイントだ。Timerを貼り付けたらまずプロパティを設定する。

 と言ってもTimerのプロパティはほとんどない。まずTickを有効にするEnabledプロパティは予めtrueにしておこう。作成するアプリケーションは時計なのでTimerをとめる必要はまずない。次にIntervalプロパティだがこれはとりあえず1000ms=1秒で良いだろう。

 次は時計の表示部を作ろう。ツールボックスでLabelを選択しFormに貼り付ける。LabelはFontプロパティで好きなフォントを選択し、少し大きめのサイズにしておこう。

■Tickイベントのコードを書く

 TimerをダブルクリックするとTickイベントのコードが表示されると思う。ここで先程のLabelのTextプロパティに現在時刻の文字列を設定すればディジタル時計のできあがりである。現在時刻はDateTime.Nowプロパティで取得できる。したがってたった1行記述すれば済んでしまう。


private void timer1_Tick(object sender, System.EventArgs e)
{
label1.Text = DateTime.Now.ToShortTimeString();
}

 ここであれ?と思ったあなたは非常にするどい。よく見るとDateTimeのインスタンスを作成していない。しかしこれで良いのである。実はDateTime.Nowプロパティはstaticプロパティなのでインスタンスを生成しなくても使えるのである。

 ところで表示してみると分かると思うがこの例では時、分だけで秒がない。秒まで表示したい場合はToShortTimeString()をToLongTimeStringに変えれば良い。

■もう少し体よく

 今回はちゃんとしたアプリケーションなので、それなりにちゃんと作らなければならない。FormのTextプロパティは"ディジタルクロック"等に設定する。Formのサイズもそれらしく横長に作ろう。そして忘れてはいけないのがユーザーにサイズ変更をさせないこと。それにはまずFormのFormBorderStyleプロパティをFixedSingleに設定し、サイズ変更できないようにする。その上でFormのMaximizeBoxプロパティをFalseに設定し、最大化ボタンを無効にする。

■次回はもう少し機能を追加する

 今回はTimerを使用して1秒周期で更新されるディジタル時計を作成した。TickイベントでDateTime.Nowプロパティにより現在時刻を取得し、ToShortTimeStringメソッド或いはToLongTimeStringメソッドを用いて文字列に変換してLabelのTextプロパティに設定した。

 Formのサイズ変更を禁止するにはFormBorderStyleプロパティをFixedSingleに設定し、更にMaximizeBoxプロパティをFalseにする必要があった。次回はこれにもう少し機能を追加してみよう。

 それでは次回!



タブレットPC開発入門 C#編 第15回 ディジタル時計を作る その1−Timerを使う

Reported by Allergy


Last-modified: Sun, 24 May 2009 23:45:30 JST (3462d)