Chapter 16

ステップ4-2: ロジックの記述

Apterygiformes-zenn
Apterygiformes-zenn
2021.12.11に更新

概要

一定間隔でTextBlockに現在時刻を設定するように作っていきます。

コードの表示

ソリューションエクスプローラーでMainWindow.xaml.csを開きます。

タイマー変数の用意

定期的にイベントを発生させるためのタイマーを用意します。
タイマーにはSystem.Windows.Threading名前空間のDispatcherTimerクラスを使用します。

https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.threading.dispatchertimer?view=windowsdesktop-6.0

MainWindowクラスの定義の中に以下を入力してください。

private readonly DispatcherTimer _timer = new();

📘他の書き方

古いバージョンのC#では

クラス名 変数名 = new();

という書き方ができないので、その場合は

クラス名 変数名 = new クラス名();

と書きます。

DispatcherTimerの部分で赤波線が表示されています。
赤波線の行でCtrlキーを押しながら.(ピリオド)を押してください。
そうすると解決方法が表示されます。

一番上の選択肢は、usingディレクティブを追加する方法です。

https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/using-directive

2番目の選択肢は完全修飾名前空間を指定する方法です。

一番上のusing ~を選択してください。
usingが追加されて赤波線が消えました。

タイマーの変数にコメントを入れます。
変数の上の行で///と入力してください。

↓↓↓↓↓

自動生成されたsummaryタグの中にコメントを入力してください。

タイマー初期化処理の作成

MainWindowのコンストラクタにInitializeTimer();と入力します。
まだこのメソッドは定義されていないので赤波線で表示されます。

Ctrl + .を押してメソッド生成を選択してください。

↓↓↓↓↓

InitializeTimerメソッドのthrowの行を消して、以下を入力します。

// イベント発生間隔の設定
_timer.Interval = TimeSpan.FromMilliseconds(500);
// イベント登録
_timer.Tick += (_, _) =>
{
    // 現在時刻を設定
    TimeLabel.Text = DateTime.Now.ToString("HH:mm:ss");
};

500ミリ秒ごとにTickイベントが発生します。
TickイベントではTextBlockに現在時刻を設定しています。

📘他の書き方
_timer.Tick += (_, _) =>
{
    // 処理
};

_timer.Tick += Timer_Tick;

private void Timer_Tick(object sender, EventArgs e)
{
    // 処理
}

に分ける書き方もできますが、今回は複数のTickイベントで処理を使いまわすようなことはないため、Tickイベントに直接処理を記述しました。
また、

_timer.Tick += (object sender, EventArgs e) =>
{
    // 処理
};

と書いても

_timer.Tick += (s, e) =>
{
    // 処理
};

と書いてもよいですが、
今回は引数の値を使用しないので_破棄しています。

コメントを入れましょう。

///コメント(ドキュメントコメント)を書いておくと、コメントを設定した変数やメソッドなどにマウスカーソルを合わせるとコメント内容がツールチップで表示されます。

https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/xmldoc/

タイマー開始処理の記述

最後にコンストラクタのタイマー初期化処理の後に、タイマー開始処理を書きます。

_timer.Start();

usingの整理

usingディレクティブを整理しておきましょう。
エディタ内で右クリックし、usingの削除と並び変えを選択します。

↓↓↓↓↓

ソース中で使用していないものが削除されます。
特に実行ファイルサイズが小さくなるとかはなく、ソースが少しすっきりするだけです。

実行

実行してみます。

画面を拡大すると時刻のテキストも拡大します。
WindowShowInTaskbarをOFFにしたため、タスクバーに実行プログラムのアイコンは表示されません。
TopmostをONにしたため、他のウィンドウより前面に表示されます。