net - openfiledialog1 c#
¿Cómo usar OpenFileDialog para seleccionar una carpeta? (7)
Aquí hay otra solución, que tiene toda la fuente disponible en un solo archivo ZIP simple.
Presenta OpenFileDialog con indicadores de ventanas adicionales que lo hacen funcionar como el cuadro de diálogo Selección de carpeta de Windows 7+.
Según el sitio web, es de dominio público: "No hay ninguna licencia como la que puede tomar y hacer con el código lo que quiera".
- Artículo: .NET Win 7-style folder select dialog ( http://www.lyquidity.com/devblog/?p=136 )
- Código fuente: http://s3downloads.lyquidity.com/FolderSelectDialog/FolderSelectDialog.zip
Enlaces de Archive.org:
¿Cómo usar OpenFileDialog
para seleccionar carpetas?
Iba a usar el siguiente proyecto: https://github.com/scottwis/OpenFileOrFolderDialog
Sin embargo, me enfrenté a un problema. Utiliza la función OPENFILENAME
y la estructura OPENFILENAME
. Y OPENFILENAME
tiene el miembro llamado templateID
. Es el identificador de la plantilla de diálogo. Y el proyecto también contiene el archivo res1.rc
y el inicio de diálogo con plantilla. Pero no pude averiguar cómo adjuntar este archivo a mi proyecto de C #.
¿Hay una mejor manera de usar un OpenFileDialog
para seleccionar carpetas?
Básicamente necesitas la clase FolderBrowserDialog
:
Pide al usuario que seleccione una carpeta. Esta clase no puede heredarse.
Ejemplo:
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");
}
}
Si trabaja en WPF , debe agregar la referencia a System.Windows.Forms
.
también tiene que agregar using System.IO
para la clase de Directory
Como nota para los futuros usuarios que FolderBrowserDialog
evitar el uso de FolderBrowserDialog
, Microsoft solía lanzar una API llamada WindowsAPICodePack que tenía un diálogo útil llamado CommonOpenFileDialog
, que podría configurarse en un modo IsFolderPicker
.
Si tiene acceso a paquetes nuget, todavía está disponible en las listas públicas como WindowsAPICodePack
Para la línea de inclusión:
using Microsoft.WindowsAPICodePack.Dialogs;
Uso:
CommonOpenFileDialog dialog = new CommonOpenFileDialog();
dialog.InitialDirectory = "C://Users";
dialog.IsFolderPicker = true;
if (dialog.ShowDialog() == CommonFileDialogResult.Ok)
{
MessageBox.Show("You selected: " + dialog.FileName);
}
AVISO: El paquete oficial de Microsoft Nuget ya está disponible
- Microsoft.WindowsAPICodePack-Core
- Microsoft.WindowsAPICodePack-Shell
Cada paquete es de Microsoft e instalará ambos.
URL del proyecto: http://code.msdn.microsoft.com/WindowsAPICodePack .
El usuario de aybe ha cargado una serie de paquetes no oficiales. La mayoría de las personas parecen confiar en él como una fuente confiable.
Esto es todo lo que necesitaba instalar para usar CommonOpenFileDialog
. (Nuget maneja las dependencias)
Install-Package WindowsAPICodePack-Shell
Eche un vistazo a las bibliotecas de Ookii Dialogs que tienen una implementación de un cuadro de diálogo del navegador de carpetas para Windows Forms y WPF respectivamente.
Ookii.Dialogs.WinForms
Ookii.Dialogs.Wpf
Es extraño que tantas respuestas / votos, pero nadie agregue el siguiente código como respuesta:
using (var folderDialog = new FolderBrowserDialog())
{
if (folderDialog.ShowDialog() == DialogResult.OK)
{
// folderDialog.SelectedPath -- your result
}
}
Hay una solución de pirateo que utiliza OpenFileDialog
donde ValidateNames
y CheckFileExists
están configurados en falso y FileName
recibe un valor simulado para indicar que un directorio está seleccionado.
Digo hackear porque confunde a los usuarios cómo seleccionar una carpeta. Deben estar en la carpeta deseada y luego presionar Abrir mientras el nombre del archivo dice "Selección de carpeta".
Esto se basa en Seleccionar archivo o carpeta del mismo cuadro de diálogo por Denis Stankovski.
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);
// ...
}
Me suena como si estuvieras justo después del FolderBrowserDialog .