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

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

2002年11月21日(木)版

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

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


■もう少し機能を付け加える。

 今回はディジタル時計を作るのその2である。前回作成したディジタル時計に更に機能を加えていく。

■メニューエディタがない?

 Visual Basicユーザーは既にお気付きかも知れないが、C#にはメニューエディタはない。代わりにツールボックスにMainMenuコントロールが追加されているのでこれを使うことになる。FormにMainMenuを貼り付けると、「ここへ入力」と表示されるので、ここへ適宜メニュー項目を追加する。

 まずは最初のトップレベルメニューとして"ファイル(&F)"を入力する。そしてそのサブメニューとして"終了(&X)"を入力する。今追加した"終了"メニューをダブルくクリックするとメニューのハンドラのコードが表示される。"終了メニュー"のハンドラでは以下のように単にCloseメソッドを記述するだけで良い。


private void menuItem2_Click(object sender, System.EventArgs e)
{
Close(); // Formを閉じる
}

 CloseはFormを閉じるメソッドである。

■24時間表示と12時間表示を切り替え可能にする

 時刻の表示には24時間制と12時間制があるが、これは人によって好みが分かれるところである。もしあなたが自分で作ったアプリケーションを公開して多くの人に使って欲しいと考えているなら、表示や操作方法を使う人の好みに合わせて変更できるようにしておくことは重要である。

 ここでは新たにメニューを追加して時刻の24時間表示と12時間表示を切り替え可能にしてみよう。トップレベルに"設定(&S)"を入力する。そしてそのサブメニューとして"12時間表示(&H)"を入力する。このときFormを小さくしすぎていると次のトップレベルメニューが追加できなくなるので注意して欲しい。その場合はFormの横幅をもう少し広げよう。

 「12時間表示」メニューは必要ならチェックするようにする。これがチェックされているとTimerのTickイベントで判定して時刻を12時間制で表示する。このためにはまず12時間表示モードであることを示すbool型のメンバ変数を宣言し、初期値をfalseとする。


private bool displayBy12hSystem = false;

 そして先程追加した「12時間表示」メニューをダブルクリックしてイベントコードを表示し、以下のコードを記述する。


private void menuItem4_Click(object sender, System.EventArgs e)
{
displayBy12hSystem = !displayBy12hSystem;
menuItem4.Checked = displayBy12hSystem;
}

 解説すると、まずdisplayBy12hSystemの値を反転させている。次にdisplayBy12hSystemの値に応じてメニューそのもののチェック状態を設定している。

■12時間制で文字列を取得するには

 さて、ToLongTimeStringメソッドは24時間制で文字列を返してくれるのでこちらは良いとして問題は12時間表示の場合である。12時間表示で文字列を取得するには、DateTime.NowのToStringメソッドで以下のようにフォーマットすれば良い。末尾には午前午後の別を表す"tt"をつける。


label1.Text = DateTime.Now.ToString("hh:mm:ss tt");

 ToStringメソッドに渡している文字列は時刻の書式を指定している。先頭の"hh"が時刻を12時間制で表示させる指定である。12時間制なので末尾には午前午後の別を表示するように"tt"を指定した。ところが実際に表示をしてみると分かるのだが、"tt"で書式指定した午前午後の表示が「午前」と「午後」になってしまっている。

 このままでも良いのだが、これをよりディジタル時計っぽく"AM"と"PM"が表示されるようにしたい。このためにはToStringメソッドの第2引数で、インバリアントなDateFormatInfoを指定すれば良い。


label1.Text = DateTime.Now.ToString("hh:mm:ss tt",System.Globalization.DateTimeFormatInfo.InvariantInfo);

 後はTimerのTickイベントで、以下のようにdisplayBy12hSystem変数の値に応じて表示を切り替えれば良い。


private void timer1_Tick(object sender, System.EventArgs e)
{
if(displayBy12hSystem)
{
label1.Text = DateTime.Now.ToString("hh:mm:ss tt",System.Globalization.DateTimeFormatInfo.InvariantInfo);
}
else
{
label1.Text = DateTime.Now.ToLongTimeString();
}
}

 これで時刻の24時間表示と12時間表示の切り替えが可能となった。

■次回はアラーム機能を追加

 今回はMainMenuコントロールを使ってディジタル時計にメニューを追加した。メニューによって「終了」と「12時間表示」の機能を加えた。DateTime.Nowで取得した現在時刻のToStringメソッドに、書式を指定する文字列を与えることで必要な形式の文字列を得ることが可能だ。

 次回はディジタル時計にアラームの機能を追加する仕上げをしよう。

 それでは次回!



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

Reported by Allergy


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