時間になったら知らせてくれるタイマーは便利な存在です。普通のタイマーはひとつの時間しか設定できませんが、複数の時間を設定することができるタイマーをつくることにします。

マルチタイマーをつくる

ではさっそくつくってみましょう。

作成するもの

デザイナで以下のようなものをつくります。

Form1クラス

FormConfigクラス

TimeControlクラス

TimeMessageクラス

時間になったらメッセージを表示するので時間とメッセージを管理するためのクラスを作成します。作成するクラスの名前はTimeMessageとします。

FormConfigクラスとTimeControlクラス

設定のためのフォームFormConfigにはユーザーコントロールTimeControlを10個貼り付けています。

まずTimeControlクラスをみてみましょう。

データを設定するためのメソッドと取得するためのメソッドを定義しています。アップダウンコントロールとテキストボックスに入力された文字列・値をこれで管理します。

つぎにFormConfigクラスをみてみましょう。

コンストラクタでは10個のTimeControlをリストにしています。FormConfigを表示するときには先にフィールド変数timeMessagesにデータをセットしておきます。

また[反映]ボタンが押されるとダイアログの[OK]ボタンが押されたときと同じ処理が行なわれるようにbutton1のDialogResultプロパティにDialogResult.OKを設定しています。

FormConfigが表示されるときにセットされているデータを表示させます。timeControls[i]に表示されるデータはtimeMessages[i]のデータになるようにfor文を使ってデータをセットしています。

[反映]ボタンをおすとそれぞれのTimeControlからデータを取得してtimeMessagesに格納しています。

Form1クラス

最後にメインになるForm1クラスについて。

コンストラクタでタイマーの設定を行なっています。10秒ごとにイベントが発生するようにしています。Tickイベントがおきたら時刻を調べてtimeMessagesに設定されているデータと照合してメッセージの表示が必要かどうかを判断しています。

Tickイベントの処理は1分に1回でよいので現在時刻が何分か調べてそれをフィールド変数lastMinuteに格納しています。次にTickイベントがおきても同じ「分」であればなにもおきないようにしています。

timeMessagesに格納されているデータと現在時刻が同じかどうかを調べています。同じであればダイアログを表示させて設定時刻とメッセージを表示させています。

時刻を設定する処理も必要です。[設定]ボタンをクリックするとFormConfigが表示されます。そして[反映]ボタンが押されたときだけダイアログに入力されたデータを取得して、Form1のフィールド変数timeMessagesに保存しています。

設定を保存する

これだけだとアプリケーションを終了させるとまた設定をしなおさないといけません。そこで設定を保存できるようにします。

まずは設定を保存する場合の処理について。SaveConfigメソッドを作成し、そのなかで設定の保存をおこないます。SaveConfigメソッドが呼び出されるタイミングは新しい設定が完了したときでよいと思われます。

次にSaveConfigメソッドの内容ですが、今後ほかにもファイルとして保存したいものができるかもしれないので、別クラスとしてDocクラスを作成します。Docクラスのインスタンスを生成してそこにtimeMessagesの内容を保存してからこれをファイルとして保存します。

保存されるファイルの名前はconfig.xmlとして場所は実行ファイルと同じフォルダにします。コンストラクタでフィールド変数configFilePathにconfig.xmlのパスを格納します。

これは設定をファイルから読み込むためのメソッドです。

マルチタイマーを起動するたびに自分で設定ファイルを読み込ませるのは不便ではないでしょうか? 実行されると自動で設定ファイルが読み込まれるように、コンストラクタ内で以下の処理をおこないます。

また前回の時間を管理するアプリと同様

C#でつくるポモドーロ・テクニックで時間管理をするアプリ

うっかり終了させてしまわないように、そして必要ないときはタスクトレイのなかに入れておくために以下のメソッドを定義します。