В данной заметке я решил кратко, а главное наглядно продемонстрировать пример создания окна для выбора файла.
Сразу оговорюсь, что если Вас интересует окно для выбора директории, то Вам нужно смотреть данную заметку.
По сравнению с окном для выбора папок, форма для выбора файлов более богата настройками. Однако в целом принцип работы класса OpenFileDialog не отличается от класса FolderBrowserDialog. Создадим новую форму и перейдем к ее коду. Там уже будет создан конструктор нашей формы, именно там мы и будем вызывать наше окно, для выбора файла.
public Form1() { InitializeComponent(); OpenFileDialog OPF = new OpenFileDialog(); if (OPF.ShowDialog() == DialogResult.OK) { MessageBox.Show(OPF.FileName); } }
Пример уже вполне рабочий, однако использовать данный класс так не стоит. Главная причина этому — форма показывает нам абсолютно все файлы. В жизни такое бывает редко, поэтому давайте ограничим отображение только файлами txt и cs. Для этого нам понадобиться свойство Filter.
OPF.Filter = "Файлы txt|*.txt|Файлы cs|*.cs";
Фильтр задается через разделитель по следующему принципу: «ОписаниеТипаФайла|МаскаПоискаФайла[|…]». Таким образом в нашем примере в качестве описания выступают фразы «Файлы txt» и «Файлы cs», а в качества масок «*.txt» и «*.cs» — что соответствует любым файлам с расширением txt и cs. Так же мы можем явно задать имя файла, который нам нужно выбрать.
OPF.Filter = "Файлы txt|*.txt|Файлы cs|Form1.cs";
Так же мы можем разрешить пользователю выбор нескольких файлов сразу, для этого необходимо поставить свойство Multiselect = true. Однако тогда, для полечения всех имен выбранных файлов необходимо будет использовать массив FileNames вместо свойства FileName.
public Form1() { InitializeComponent(); OpenFileDialog OPF = new OpenFileDialog(); OPF.Multiselect = true; if (OPF.ShowDialog() == DialogResult.OK) { foreach (string file in OPF.FileNames) { MessageBox.Show(file); } } }
В целом если покопаться в свойствах класса OpenFileDialog можно найти еще несколько забавных свойств, однако основные из них, я описал выше.