【WPF】Timerでタイマーを作ってみました!

当ページのリンクには広告が含まれています。

以前、Timerについて「【wpf】よくわかるtimer処理(一定時間間隔イベント)」の記事に記載しましたが、今回はそれを使ったタイマープログラムを作成してみました。

簡易的ではありますが、ミーテイングや発表など決められた時間の中で発言する場合など、こういうちょっとしたタイマーがあれば便利かと思います。

使い方、並びにソースコードの紹介と、Visual Studio 2022でリビルドできるプロジェクト丸ごとダウンロードできるようにもしていますので、自由にカスタマイズして利用して頂ければと思います。

ただし、バグがあるかもしれませんので、その点はご了承ください。

目次

タイマーの画面

今回作ったタイマーは次のようなものになります。

本タイマーには次の機能があります。

  • カウントの開始値を設定
  • 現在のカウント値を変更
  • フォントの指定
  • フォント色の指定
  • サイズの拡大・縮小
  • カウントアップ時の動作設定(カウント停止、ループ、マイナスカウント)
  • カウントアップ時の処理登録(プログラムの終了、コマンドの実行)

ダウンロード

次のリンクからダウンロードが可能です。

使い方

右端のボタンをクリックすることで、カウントダウンの開始、一時停止、カウンターのリセット(開始時間に戻す)が可能です。

また、カウンターをダブルクリックすると、現在のカウント値を変更することができます。

また、右クリックで次のメニューが表示されます。

レイアウト数字のフォントと色の設定を行います。
現在のカウントダウン値を変更現在表示されているカウントダウンの値を変更します。
カウントダウンの開始時間を設定カウントダウンの開始値を設定します。
カウントアップ後の動作カウントアップ(カウンターが0)時の動作を次の3つから選択します。
 1.カウントダウンを停止する。
 2.カウントダウンをループする。
 3.マイナスになってもカウントダウンを続ける。
カウントアップ時の処理カウントアップ(カウンターが0)時に実行した処理の設定します。
次の2つを同時に設定することが可能です。
 1.プログラムを終了する。
 2.コマンドを実行する。
終了プログラムを終了します。

レイアウト

フォントと文字色の設定が可能です。

「初期値に戻す」ボタンをクリックすると、フォントは「Harlow Solid Italic」、文字色は黒が設定されます。

Windowsに標準搭載されているフォントには日本語フォントもあり、当然このプログラムでも日本語フォントの選択は可能なのですが、ドロップダウンリスト上の表記はすべて英語になっています。

英語表記を日本語表記に変換するのが面倒だったので、そのままにしてしまいました。

現在のカウントダウン値を変更

編集モードに移行し、現在表示中のカウントダウンを変更できます。

カウンターをダブルクリックするのと同じです。

カウントダウンの開始時間を設定

カウントダウンの開始時間を設定します。

カウントダウンを停止していなければ、開始時間設定中も裏でカウントダウンが継続され、設定後すぐにカウントダウン値が表示されます。

カウントダウンを停止しても、開始時間設定後はすぐにカウントダウン値が表示されてしまいますので、今設定した開始時間からカウントダウンを再開したい場合はリセットボタンを押して下さい。

カウントダウン後の動作

カウントアップ(カウンターが0)になった時、カウントを停止するか、再び開始時間からカウントを開始するか、マイナスのままカウントを継続するかを選択します。

どれかをチェックすると、他の2つが解除されます。

「カウントダウンをループする」をチェックし、カウントアップ時の処理で「コマンドの実行」をチェックすると、一定時間間隔で任意のコマンドを実行することが可能です。

カウントアップ時の処理

カウントアップ(カウンターが0)になった時の動作を指定します。

「プログラムを終了する」にチェックを入れると、カウントアップ時にプログラムが終了します。

「コマンドを実行する」にチェックを入れると、(実行したいコマンド[ ])で指定されたコマンドが実行されます。

両方がチェックされている場合、コマンドを実行してからプログラムを終了しますので、カウントアップ直後に1度だけコマンドを実行し、本プログラムを終了させることが可能です。

プロジェクト一式のダウンロード先

Visual Stuido 2019のプロジェクト一式は下記からダウンロード可能です。

XAMLのソースコード

XAML側はコメントを全く入れていないのですが、単純に必要なコントロール(テキストボックス、ラベル、コンボボックス、コンテキストメニュー、スタックパネル、グリッドなど)を張り付けているだけです。

以下のような構造になっていますので、これを念頭にXAMLを見ていただければ理解が深まるかと思います。

C#側のソースコード

C#側のコードについては、次のような構造になっています。

Timerについては、こちらの記事で紹介した関数を使っています。

一定間隔で実行させたい処理はTimerMethodというメソッドに記述していますが、カウントアップ時の処理分岐(タイマー停止、ループ、マイナスカウント、プログラム終了、任意のコマンド実行)が必要なので、その分が少しだけ複雑になっています。

また、任意のコマンド実行時に例外が発生するとプログラムが異常終了してしまいますので、それを防ぐために try~catch で例外を握りつぶしています。

構成ファイル(app.config)について

画面から変更したフォントや文字色、ダウントダウン初期値、カウントダウン後の動作などの設定情報は、app.config ファイルに保存されています。

今回の場合、プログラムフォルダに存在するMyTimer.exe.config が該当しますが、実はここを読み書きしているのではなく、 次の場所に保管されている user.config が使われます。

例えば、hoge というユーザーが MyTimerを実行した場合、以下のようになります。

では、実行ファイルが存在する MyTimer.config は削除してよいかというと、そうではありません。

これはMicrosoftの仕様のようで、プログラム起動時に MyTimer.config を必ず参照するようになっており、もし存在しなければプログラムはフリーズしたままになります。

MyTimer.config は、初回起動時に初期値を参照するだけかと思いきや、そうではありませんので、不要と判断して削除しないようにしてください。

まとめ

今回はTimerを使ったタイマープログラムを作成してみたので、その使い方とソースコードについて、簡単な解説を交えて紹介致しました。

Visual Studio 2022 でリビルドするためのプロジェクトもダウンロードできますので、必要に応じてカスタマイズしてご利用いただければと思います。

本来ならMVVMをつかうのが正統派なのかもしれませんが、メリットが全く感じられないので今回はC#でゴリゴリ作成しています。

私自身がWindowsFormに慣れているというものあるのですが、逆にMVVMでプログラミングされている技術者の数が圧倒的に少ないので、むしろ今回の書き方の方がシックリいく方が多いのではないかと思っています。

もし皆さんのプログラミングで何かのヒントになれば幸いです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次