Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

The FileNameEditor class lets you provide your users with a standard open file dialog box or save file dialog box from the CodeSmith property grid. To use this class, you must include a reference to the CodeSmith.CustomProperties assembly in your template. You'll make the code simpler if you import the namespace as well:

<%@ Assembly Name="CodeSmith.CustomProperties" %>
<%@ Import Namespace="CodeSmith.CustomProperties" %>

After you include the appropriate assembly reference, you can define a property in a script block that uses the FileNameEditor:

Wiki Markup

<script runat="template">
private string \_userFileName = @"c:\temp\test.txt";
\[Editor(typeof(FileNameEditor), typeof(System.Drawing.Design.UITypeEditor)),
Category("Custom"), Description("User selected file.")\]
public string UserFileName
{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get {return \_userFileName;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set {_userFileName= value;}
}
</script>

When the user executes the template, the specified property will display a builder button on the property sheet:

IMAGE GOES HERE

Clicking the builder button will open the specified file dialog box:

IMAGE GOES HERE

You can customize the appearance of the file dialog box by applying the FileDialogAttribute to the property. For example, consider this property definition:

Wiki Markup

private string \_openFileName = @"c:\temp\test.txt";
\[Editor(typeof(FileNameEditor), typeof(System.Drawing.Design.UITypeEditor)),
FileDialogAttribute(FileDialogType.Open, Title="Select Input File"),
Category("Custom"), Description("User selected file.")\]
public string OpenFileName
{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;get {return \_openFileName;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;set {_openFileName= value;}
}

The resulting file dialog box looks like this:

You can specify these properties in the FileDialogAttribute:

Property

Meaning

Default

FileDialogType

Save or Open

FileDialogType.Save

Filter

Filter string for file extensions

All Files (.)|*.*

Title

Dialog box title

Select propertyname

DefaultExtension

Default file extensions

None

CheckFileExists

True to only allow selecting existing files

False

CheckPathExists

True to only allow using existing paths

False

Note

To select a folder name instead of a file name, use the FolderNameEditor class from the .NET Framework instead:

Wiki Markup
<%@ Assembly Name="System.Design" %>\\
 <script runat="template">\\
 private string \_outputDirectory = @"c:\temp";\\
 \[Editor(typeof(System.Windows.Forms.Design.FolderNameEditor), typeof(System.Drawing.Design.UITypeEditor)),\\
 Category("Custom"), Description("Output directory.")\]\\
 public string OutputDirectory\\
 {\\
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get {return \_outputDirectory;}\\
 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set {_outputDirectory= value;}\\
 }\\
 </script>