Skip to main content

OpenFileDialog

This class allows you to check whether a file exists and to open it. The ShowReadOnly property determines whether a read-only check box appears in the dialog box. The ReadOnlyChecked property indicates whether the read-only check box is checked.

Most of the core functionality for this class is found in the FileDialog class.

If you want to give the user the ability to select a folder instead of a file, use FolderBrowserDialog instead.

info

For a complete list of properties, methods, and events, see the API documentation.

Features​

Filtering​

The OpenFileDialog filters files shown to the user based on a given pattern. For example, the filter C# files|*.cs|All files|*.* will show files ending with .cs by default. Users can modify the filter using the dropdown menu.

OpenFileDialog showing file type filtering options

tip

The FileDialog.FileName property returns the virtual path relative to the root. To get the physical path on the server, use FileDialog.MapPath().

Help​

The OpenFileDialog includes an optional "?" (Help) tool for displaying navigation assistance.

OpenFileDialog showing help button and navigation interface

How To​

Connect to the File System​

Add at least one IFileSystemProvider to the Roots collection before showing the dialog:

//Using an absolute file path
OpenFileDialog filedialog = new OpenFileDialog();
filedialog.Roots.Add(new FileSystemProvider("C:\\", "Main_Directory"));
//Using a relative file path
OpenFileDialog filedialog = new OpenFileDialog();
filedialog.Roots.Add(new FileSystemProvider("./", "Main_Directory"));

Customize the Appearance​

The OpenFileDialog supports customization of individual controls including textboxes and pickers.

To customize these controls:

  1. Create a class inheriting from FileDialogUI
  2. Add the custom OpenFileDialog constructor
  3. Modify the controls as needed
public class CustomOpenFileDialogUI : FileDialogUI
{
public CustomOpenFileDialogUI(OpenFileDialog openFileDialog) : base(openFileDialog)
{
this.HeaderBackColor = Color.DarkOrange;
foreach (ColumnHeader col in this.listView.Columns)
{
col.BackColor = Color.DarkOrange;
}
}
}

After setting the OpenFileDialog's DialogTemplate property to the new class, the result looks like this:

Customized OpenFileDialog with dark orange theme applied

For advanced customization of the OpenFileDialog using custom templates, see below.

Create a Custom UI by deriving from FileDialogUI​

Create a custom class that derives from FileDialogUI:

public class CustomFileBrowserUI : FileDialogUI
{
public CustomFileBrowserUI(): base()
{
InitializeComponent();
}
}

Create an OpenFileDialog and assign the custom class to DialogTemplate, as shown below. Set options such as InitialDirectory and MultiSelect before calling ShowDialog.

var openFileDialog = new OpenFileDialog {
DialogTemplate = typeof(CustomFileBrowserUI),
InitialDirectory = "...",
Multiselect = true
};
openFileDialog.ShowDialog();

Dispose of the FileDialog after use. A using statement ensures disposal when the block ends:

using (var openFileDialog = new OpenFileDialog {
DialogTemplate = typeof(CustomFileBrowserUI),
InitialDirectory = "...",
Multiselect = true
}) {
openFileDialog.ShowDialog();
}