Как использовать 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
    }
}

звучит так, как будто вы сразу после FolderBrowserDialog.


существует хакерское решение с использованием OpenFileDialog здесь ValidateNames и CheckFileExists оба установлены в false и FileName присваивается фиктивное значение, указывающее, что выбран каталог.

Я говорю hack, потому что это сбивает с толку пользователей о том, как выбрать папку. Они должны быть в нужной папке, а затем просто нажмите кнопку Открыть, а имя файла говорит " Выбор папки."

C# Folder selection dialog

это основано на Выберите файл или папку из тот же диалог Денис Станковски.

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+.

на веб-сайте, это общественное достояние: "нет лицензии, как таковой, как вы можете взять и сделать с кодом, что вы хотите."

Archive.org ссылки: