¿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 GetOpenFileName
función y la OPENFILENAME
estructura. Y OPENFILENAME
tiene el miembro nombrado templateID
. Es el identificador para la plantilla de diálogo. Y el proyecto contiene el res1.rc
archivo y el diálogo de inicio de plantilla también. Pero no pude descubrir cómo adjuntar este archivo a mi proyecto C #.
¿Hay una mejor manera de usar un OpenFileDialog
para seleccionar carpetas?
c#
.net
dialog
openfiledialog
Yun
fuente
fuente
ValidateNames
yCheckFileExists
son establecen en falso yFileName
se le da un valor simulada para indicar que se ha seleccionado un directorio. Digo hackear porque confunde a los usuarios sobre cómo seleccionar una carpeta. Consulte Seleccionar archivo o carpeta desde el mismo cuadro de diálogoValidateNames
yCheckFileExists
quefalse
no estaba trabajando, tenía que ponerlos a0
(o aprender PowerShell mejor)Respuestas:
Básicamente necesitas la
FolderBrowserDialog
clase:Ejemplo:
Si trabaja en WPF , debe agregar la referencia
System.Windows.Forms
.también tienes que agregar
using System.IO
para laDirectory
clasefuente
new CommonOpenFileDialog { IsFolderPicker = true }
.Como una nota para los futuros usuarios que deseen evitar el uso
FolderBrowserDialog
, Microsoft una vez lanzó una API llamada WindowsAPICodePack que tenía un diálogo útil llamadoCommonOpenFileDialog
, que podría establecerse en unIsFolderPicker
modo. La API está disponible de Microsoft como un paquete NuGet .Esto es todo lo que necesitaba para instalar y usar el
CommonOpenFileDialog
. (NuGet manejó las dependencias)Para la línea de inclusión:
Uso:
fuente
Microsoft.WindowsAPICodePack.Shell
paquete a través de NuGet antes de poder usar estoCommonOpenFileDialog
.FolderBrowserDialog
usuarios: el uso de varias instancias simultáneas puede crear problemas. EstoCommonOpenFileDialog
es mejorWindowsAPICodePack-Shell
Hay una solución pirata que usa
OpenFileDialog
whereValidateNames
yCheckFileExists
se establece en false yFileName
se le asigna un valor simulado para indicar que se ha seleccionado un directorio.Digo hackear porque confunde a los usuarios sobre 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.
fuente
Folder Selection.
agregará al final del nombre del archivo de la siguiente manera:C:\Folder Selection.
supongo que siempre puedes eliminar esos caracteres de la cadena. Todavía se ve mejor que el FolderBrowserDialogOpen
botón principal del cuadro de diálogo no funciona como se esperaba! ¡porque saltas a la carpeta anterior! pero funciona cuando solo hace doble clic en las carpetas para seleccionarlas o selecciona algunos archivos dentro de cada carpeta (si hay algún archivo que pueda elegir)Es extraño que haya tantas respuestas / votos, pero nadie agrega el siguiente código como respuesta:
fuente
Me parece que estás justo después del FolderBrowserDialog .
fuente
Aquí hay otra solución, que tiene toda la fuente disponible en un único archivo ZIP simple.
Presenta OpenFileDialog con indicadores adicionales de Windows que lo hacen funcionar como el diálogo de Selección de Carpeta de Windows 7+.
Según el sitio web, es de dominio público: "No hay licencia como tal, ya que es libre de tomar y hacer con el código lo que quiera".
Enlaces de Archive.org:
fuente
Eche un vistazo a las bibliotecas Ookii Dialogs que tienen una implementación de un diálogo de carpeta para Windows Forms y WPF respectivamente.
fuente
esta debería ser la forma más obvia y directa
fuente
FolderBrowserDialog
ya se ha ofrecido aquí varias veces, y es la respuesta incorrecta. Es una interfaz obsoleta y muy poco amigable para el usuario. Se usaSHBrowseForFolder
debajo, e incluso los documentos dicen "Para Windows Vista o posterior, se recomienda usarIFileDialog
con laFOS_PICKFOLDERS
opción en lugar de laSHBrowseForFolder
función. Esto usa el cuadro de diálogo Abrir archivos en el modo de selección de carpetas y es la implementación preferida".