Как использовать OpenFileDialog для выбора папки?
как использовать OpenFileDialog
выбрать папки?
Я собирался использовать следующий проект:https://github.com/scottwis/OpenFileOrFolderDialog
тем не менее, я столкнулся с одной проблемой. Он использует GetOpenFileName
функции OPENFILENAME
структура. И OPENFILENAME
имеет элемент с именем templateID
. Это идентификатор шаблона диалога. И проект содержит res1.rc
file и шаблонный диалог init тоже. Но я не мог понять, как прикрепить этот файл к мой проект на C#.
есть ли лучший способ использовать OpenFileDialog
выбрать папки?
6 ответов
в основном вам нужно FolderBrowserDialog
класс:
предлагает пользователю выбрать папку. Этот класс не может быть унаследован.
пример:
using(var fbd = new FolderBrowserDialog())
{
DialogResult result = fbd.ShowDialog();
if (result == DialogResult.OK && !string.IsNullOrWhiteSpace(fbd.SelectedPath))
{
string[] files = Directory.GetFiles(fbd.SelectedPath);
System.Windows.Forms.MessageBox.Show("Files found: " + files.Length.ToString(), "Message");
}
}
если вы работаете в WPF вы должны добавить ссылку на System.Windows.Forms
.
вы также должны добавить using System.IO
на Directory
класс
в качестве заметки для будущих пользователей, которые хотели бы избежать, используя FolderBrowserDialog
, Microsoft используется для выпуска API под названием WindowsAPICodePack, который имел полезный диалог под названием CommonOpenFileDialog
, это может быть установлено в IsFolderPicker
режим.
если у вас есть доступ к пакетам nuget, он по-прежнему доступен в общедоступных списках как WindowsAPICodePack
для включить строку:
using Microsoft.WindowsAPICodePack.Dialogs;
использование:
CommonOpenFileDialog dialog = new CommonOpenFileDialog();
dialog.InitialDirectory = "C:\Users";
dialog.IsFolderPicker = true;
if (dialog.ShowDialog() == CommonFileDialogResult.Ok)
{
MessageBox.Show("You selected: " + dialog.FileName);
}
странно, что так много ответов/голосов, но никто не добавьте следующий код в качестве ответа:
using (var folderDialog = new FolderBrowserDialog())
{
if (folderDialog.ShowDialog() == DialogResult.OK)
{
// folderDialog.SelectedPath -- your result
}
}
существует хакерское решение с использованием OpenFileDialog
здесь ValidateNames
и CheckFileExists
оба установлены в false и FileName
присваивается фиктивное значение, указывающее, что выбран каталог.
Я говорю hack, потому что это сбивает с толку пользователей о том, как выбрать папку. Они должны быть в нужной папке, а затем просто нажмите кнопку Открыть, а имя файла говорит " Выбор папки."
это основано на Выберите файл или папку из тот же диалог Денис Станковски.
OpenFileDialog folderBrowser = new OpenFileDialog();
// Set validate names and check file exists to false otherwise windows will
// not let you select "Folder Selection."
folderBrowser.ValidateNames = false;
folderBrowser.CheckFileExists = false;
folderBrowser.CheckPathExists = true;
// Always default to Folder Selection.
folderBrowser.FileName = "Folder Selection.";
if (folderBrowser.ShowDialog() == DialogResult.OK)
{
string folderPath = Path.GetDirectoryName(folderBrowser.FileName);
// ...
}
вот еще одно решение, которое имеет весь источник, доступный в одном, простом ZIP-файле.
Он представляет OpenFileDialog с дополнительными флагами windows, что делает его работать как диалоговое окно выбора папки Windows 7+.
на веб-сайте, это общественное достояние: "нет лицензии, как таковой, как вы можете взять и сделать с кодом, что вы хотите."
- статья: .NET Win 7-стиль папки выберите диалоговое окно (http://www.lyquidity.com/devblog/?p=136)
- исходный код:http://s3downloads.lyquidity.com/FolderSelectDialog/FolderSelectDialog.zip
Archive.org ссылки: