Как использовать OpenFileDialog для выбора папки?



как использовать OpenFileDialog для выбора папки?



Я собирался использовать следующий проект:https://github.com/scottwis/OpenFileOrFolderDialog



однако, я столкнулся с одной проблемой. Он использует GetOpenFileName функции OPENFILENAME структура. И OPENFILENAME имеет элемент с именем templateID. Это идентификатор шаблона диалога. И проект содержит res1.rc файл и шаблонный диалог init тоже. Но я не мог понять, как прикрепить этот файл мой проект на C#.



есть ли лучший способ использовать OpenFileDialog для выбора папки?

1135   6  

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 присваивается фиктивное значение, указывающее, что выбран каталог.

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

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 ссылки:

Comments

    Ничего не найдено.