RevitAPI

RevitAPIのTaskDialogクラスを検証してみた

  • RevitAPIで何気に使ってるTaskDialog
  • これってダイアログを表示するだけ?
  • その他に使い道とかあるの?

と思ったので検証してみました。

TaskDialogクラスとは

名前の通り、Revit上でダイアログを表示させることができるクラスです。
基本的にはSample1が使い方が王道(であるはず)です。

Sample1

    public void Sample1()
    {
      UIApplication uiapp = this.ActiveUIDocument.Application;
      UIDocument uidoc = uiapp.ActiveUIDocument;
      Autodesk.Revit.ApplicationServices.Application app =
        uiapp.Application as Autodesk.Revit.ApplicationServices.Application;
      Autodesk.Revit.DB.Document doc = uidoc.Document;
      Autodesk.Revit.DB.View active = doc.ActiveView;
      
      
      TaskDialog.Show("ダイアログボックスのタイトル""表示させたい内容");
    }

Sample1の実行

TaskDialogのボタン変更

サンプルを実行

Sample2のようにコーディングするとボタンが変更できました。

Sample2

    public void Sample1()
    {
      UIApplication uiapp = this.ActiveUIDocument.Application;
      UIDocument uidoc = uiapp.ActiveUIDocument;
      Autodesk.Revit.ApplicationServices.Application app =
        uiapp.Application as Autodesk.Revit.ApplicationServices.Application;
      Autodesk.Revit.DB.Document doc = uidoc.Document;
      Autodesk.Revit.DB.View active = doc.ActiveView;
      
      
      TaskDialog.Show("ダイアログボックスのタイトル""表示させたい内容", TaskDialogCommonButtons.Ok, TaskDialogResult.Ok);
    }

Sample2の実行

Showメソッド

Sample2のようにShowメソッドのオーバーロードにより、実行した時に表示されるダイアログの仕様が変わるようですね。
Showメソッドには以下のようなオーバーロードがありました。

Showメソッド

Show()
Show(String, String)
Show(String, String, TaskDialogCommonButtons)
Show(String, String, TaskDialogCommonButtons, TaskDialogResult)

Show(String, String, TaskDialogCommonButtons)

TaskDialogCommonButtonsがボタンの種類を示すで列挙型で、これにより表示されるボタンを決定します。
TaskDialogCommonButtonsについて、メンバーとボタンの対応は下表の通りです。

TaskDialogCommonButtons Enumeration

メンバー 表示されるボタン
None 閉じる(C)
Ok OK
Yes はい(Y)
No いいえ(N)
Cancel キャンセル
Retry 再試行(R)
Close 閉じる(C)

Show(String, String, TaskDialogCommonButtons, TaskDialogResult)

TaskDialogResultで、ボタンを選択した時の挙動を決めます。
これも列挙型で、メンバーは下表の通りです。

TaskDialogResult Enumeration

メンバー
None
Ok
Cancel
Retry
Yes
No
Close
CommandLink1
CommandLink2
CommandLink3
CommandLink4

これにより、TaskDialogCommonButtonsでボタンの変更、TaskDialogResultで変更したボタンの効果を付与できるっぽいです。
できるっぽいというのは下記のことからイマイチ仕様がわからなかったからです。

  • TaskDialogCommonButtonsに対応したTaskDialogResultを選択しないとマクロが失敗する
  • 対応させたところで、ダイアログは閉じるだけ

謎です。。

TaskDialogをカスタマイズ

サンプルの実行

いろいろプロパティ設定をした後にShow()メソッドでダイアログを表示、という感じでSample3のようにカスタマイズもできました。

Sample3

    public void Sample3()
    {
      UIApplication uiapp = this.ActiveUIDocument.Application;
      UIDocument uidoc = uiapp.ActiveUIDocument;
      Autodesk.Revit.ApplicationServices.Application app =
        uiapp.Application as Autodesk.Revit.ApplicationServices.Application;
      Autodesk.Revit.DB.Document doc = uidoc.Document;
      Autodesk.Revit.DB.View active = doc.ActiveView;
      
      
      TaskDialog taskDialog = new TaskDialog("カスタマイズしてみた");
      
      taskDialog.TitleAutoPrefix = false;
      taskDialog.MainIcon = TaskDialogIcon.TaskDialogIconShield;
      taskDialog.MainInstruction = "メインメッセージ";
      taskDialog.MainContent = "メインメッセージの下にちっちゃいテキストで表示されます";
      taskDialog.ExtraCheckBoxText = "チェックボックスつけてみた";
      taskDialog.ExpandedContent = "閉じているテキスト";
      taskDialog.FooterText = "フッターを表示させてみた";
      
      taskDialog.Show();
    }

Sample3の実行

カスタマイズしてみたものの、チェックボックスにどのような効果があるのかいまいちわかりません。
TaskDialogクラスのコンストラクターはTaskDialog(String tilte)のみで、引数でタイトルを指定する感じです。

TaskDialogプロパティ

Sample3で使ったプロパティでいろんなことができそうです。

Sample3で使ったプロパティ

プロパティ 内容
TitleAutoPrefix bool タイトル横にモジュール名を表示する/しないを選択
MainIcon enum TaskDialogIcon Enumerationよりアイコンを指定
MainInstruction string メインメッセージのテキスト設定
MainContent string MainInstruction下に補足メッセージを追記
ExtraCheckBoxText string チェックボックスとそのテキストを設定
ExpandedContent string 詳細テキストを設定(通常は閉じている)
FooterText string フッターのテキスト設定

TaskDialogIcon Enumerationの内容は下表の通りです。

メンバー 表示されるアイコン
TaskDialogIconNone なし
TaskDialogIconShield
TaskDialogIconInformation
TaskDialogIconError
TaskDialogIconWarning

*TaskDialogIconShield、TaskDialogIconInformation、TaskDialogIconErrorは2018以降

まとめ

基本的にはダイアログ表示のクラスなので、どういう風に表示させるかってところをいじれるようですね。
たかがTaskDialogだと思っていましたが、調べてみたらゴリゴリにカスタマイズできたので少し感動です。

ただよっぽどのことがない限り、こんなカスタマイズ仕様は使わないでしょうね笑

 

以上です。

 

↓↓C#初心者の僕が独学でお世話になった本↓↓



↓↓プログラミング初心者の僕がコーディング学習でお世話になった本↓↓



COMMENT

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください