Как использовать OpenFileDialog для выбора папки?
как использовать OpenFileDialog для выбора папки?
Я собирался использовать следующий проект:https://github.com/scottwis/OpenFileOrFolderDialog
однако, я столкнулся с одной проблемой. Он использует GetOpenFileName функции OPENFILENAME структура. И OPENFILENAME имеет элемент с именем templateID. Это идентификатор шаблона диалога. И проект содержит res1.rc файл и шаблонный диалог 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присваивается фиктивное значение, указывающее, что выбран каталог.Я говорю рубить, потому что это сбивает с толку пользователей о том, как выбрать папку. Они должны быть в нужной папке, а затем просто нажмите кнопку Открыть, а имя файла говорит "Выбор папки."
это основано на Выберите файл или папку из тот же диалог Денис Станковски.
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 ссылки:

Comments