C# で TaskDialog を使う (3)

いきなり投稿が一ヶ月半開くという体たらく… 仕事が忙しいせいです私のせいじゃありません

前々回前回の続きになります。


TaskDialog が使用できるかどうか判定するには

本当は 1 回目で書いておくべきでしたが、すっかり忘れていたためここで紹介します。 TaskDialog は Windows Vista 以降でしかサポートされていません。ですので、実行時に TaskDialog が使用できるかどうかを確かめ、使用できれば TaskDialog を使用、できなければ代替 UI を… などという状況が想像できます。

そんなときは、TaskDialog クラスに用意されている次の静的プロパティを使用すると便利です。

ズバリ、動作している環境が TaskDialog を使用できるかどうかを示す bool 値を返してくれます (と言っても、中身は Environment.OSVersion.Version.Major >= 6 してるだけですが…)。


TaskDialogRadioButton

その名の通り、ラジオ ボタンを表示できます。 ただし、TaskDialog 上でラジオ ボタンを使って何かを選択させる UI は今まで見たことないので、使いどころは少ないかもしれません。と言うより、ユーザーにアクションを選択させたいのであれば、後述の CommandLink を使うべきです。

そして、前回も乗せたこの図を見るとおわかり頂けると思いますが、TaskDialogRadioButton は TaskDialogButtonBase を継承しています。そして、新しいメンバーは何もありません。。。

ですので、そのまま使うと System.Windows.Controls.RadioButton のように IsChecked プロパティからチェック状態を判定… などということができません。やはり使いどころはあまりなさそう。

result などという変数を用意して、ラジオ ボタンがクリックされたらその名前を result に突っ込むという苦肉の策。これで、ダイアログが閉じたときにどのラジオ ボタンが選択されていたのか判定できますが…

やっぱり CommandLink の方がいいです。私はたぶん使わないです、TaskDialogRadioButton。


TaskDialogProgressBar

続いて、プログレス バーです。

TaskDialogProgressBar のコンストラクター引数は、順に最小値、最大値、現在値です。 例では、最小値 0、最大値 50、現在値 0 で初期化、TaskDialog が開かれたら 100 ミリ秒ごとに現在値を 1 ずつ追加しています (ついでに、最大値になるまでボタンを無効化していたり)。

また、例では TaskDialogProgressBar を TaskDialog クラスの ProgressBar プロパティに設定していますが、他のコントロールと同様に TaskDialog.Controls.Add() メソッドで追加することもできます。 ただし、TaskDialog 上に表示できる ProgressBar は 1 つだけです。2 つ以上 Add することはできますが、後から追加した ProgressBar しか UI 上に表示されませんのでご注意ください。


TaskDialogCommandLink

そして、TaskDialog と言ったらコレ、TaskDialogCommandLink です。

OS が表示する TaskDialog でも、CommandLink のものはよく見かけますね。 使い方は簡単で、表示するテキストを指定して初期化、TaskDialog.Controls.Add() メソッドで追加するだけです。 上記の例では、3 つめの CommandLink を Default に指定しています (青枠出てるのわかります?) ので、この状態で Enter キーを押すとコンピューターを窓から投げ捨てることになります (

また、CommandLink に表示できるのはテキストのみではなく、詳しい説明なども表示できたりします。

コンストラクターのオーバーロードで、第 3 引数に説明用のテキストを指定できます。また、TaskDialogButton と同様に UseElevationIcon プロパティで UAC の特権昇格アイコンも表示できます。

ユーザーにアクションを選択させるときに役立ちますので、是非活用して頂きたいです。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です