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
{
      get {return _userFileName;}
      set {_userFileName= value;}
}
</script>

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

IMAGE GOES HEREImage Added

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

IMAGE GOES HEREImage Added

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
{
      get {return _openFileName;}
      set {_openFileName= value;}
}

The resulting file dialog box looks like this: Image Added

You can specify these properties in the FileDialogAttribute:

...

<%@ 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
{
       get {return _outputDirectory;}
       set {_outputDirectory= value;}\\ }\\
}
</script>

Note

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

Wiki Markup