Revit-style Task Dialogs

Revit-style Task Dialogs

A TaskDialog is a Revit-style alternative to a simple Windows MessageBox. It can be used to display information and receive simple input from the user. It has a common set of controls that are arranged in a standard order to assure consistent look and feel with the rest of Revit.

Figure 19: Revit-style Task Dialog

There are two ways to create and show a task dialog to the user. The first option is to construct the TaskDialog, set its properties individually, and use the instance method Show() to show it to the user. The second is to use one of the static Show() methods to construct and show the dialog in one step. When you use the static methods only a subset of the options can be specified.

Please see Task Dialog in the API User Interface Guidelines section for information on developing a task dialog that is compliant with the standards used by Autodesk.

The following example shows how to create and display the task dialog shown above.

Code Region 3-27: Displaying Revit-style TaskDialog

[Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Automatic)]
class TaskDialogExample : IExternalCommand
{
        public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData, ref string message, Autodesk.Revit.DB.ElementSet elements)
        {
                // Get the application and document from external command data.
                Application app = commandData.Application.Application;
                Document activeDoc = commandData.Application.ActiveUIDocument.Document;

                // Creates a Revit task dialog to communicate information to the user.
                TaskDialog mainDialog = new TaskDialog("Hello, Revit!");
                mainDialog.MainInstruction = "Hello, Revit!";
                mainDialog.MainContent = 
                        "This sample shows how to use a Revit task dialog to communicate with the user." 
                        + "The command links below open additional task dialogs with more information.";

                // Add commmandLink options to task dialog
                mainDialog.AddCommandLink(TaskDialogCommandLinkId.CommandLink1,
                         "View information about the Revit installation");
                mainDialog.AddCommandLink(TaskDialogCommandLinkId.CommandLink2, 
                                "View information about the active document");

                // Set common buttons and default button. If no CommonButton or CommandLink is added,
                // task dialog will show a Close button by default
                mainDialog.CommonButtons = TaskDialogCommonButtons.Close;
                mainDialog.DefaultButton = TaskDialogResult.Close;

                // Set footer text. Footer text is usually used to link to the help document.
                mainDialog.FooterText = 
                        ""                          + "Click here for the Revit API Developer Center";

                TaskDialogResult tResult = mainDialog.Show();

                // If the user clicks the first command link, a simple Task Dialog 
                // with only a Close button shows information about the Revit installation. 
                if (TaskDialogResult.CommandLink1 == tResult)
                {
                        TaskDialog dialog_CommandLink1 = new TaskDialog("Revit Build Information");
                        dialog_CommandLink1.MainInstruction = 
                                "Revit Version Name is: " + app.VersionName + "\n"
                         + "Revit Version Number is: " + app.VersionNumber + "\n" 
                                + "Revit Version Build is: " + app.VersionBuild;

                        dialog_CommandLink1.Show();

                }

                // If the user clicks the second command link, a simple Task Dialog 
                // created by static method shows information about the active document
                else if (TaskDialogResult.CommandLink2 == tResult)
                {
                        TaskDialog.Show("Active Document Information", 
                                "Active document: " + activeDoc.Title + "\n"
                         + "Active view name: " + activeDoc.ActiveView.Name);
                }
 
                return Autodesk.Revit.UI.Result.Succeeded;
        }
}