2009-03-01 23 views
13

Quiero tener un buscador de carpetas en mi aplicación, pero No deseo querer usar el FolderBrowserDialog. (Por varias razones, por ejemplo, es doloroso de usar)utilizando OpenFileDialog para el directorio, no FolderBrowserDialog

Quiero utilizar el OpenFileDialog estándar, pero modificado para los directorios.

Como ejemplo, µTorrent tiene una buena implementación (Preferencias/Directorios/Poner nuevas descargas en :). El cuadro de diálogo Abrir archivo estándar permiten al usuario:

  • pegar rutas completas en el campo de texto en la parte inferior
  • uso de barras "Vínculos favoritos" en Vista
  • uso Buscar en Vista
  • auto recuerda último directorio
  • más ...

¿alguien sabe cómo implementar esto? Cª#.

+1

parece un juguete de http://stackoverflow.com/questions/31059/how-do-you-configure-an-openfiledialog-to-select-folders –

+0

duplicado de esta pregunta: - [¿Cómo se configura un OpenFileDIalog para seleccionar carpetas?] (Http://stackoverflow.com/questions/31059/) – CMS

Respuesta

4

No estoy seguro acerca de uTorrent pero esto suena muy parecido a la nueva Vista de IFileDialog con la opción FOS_PICKFOLDERS establecido. Genérica de C# código para ello sería algo como:

var frm = (IFileDialog)(new FileOpenDialogRCW()); 
uint options; 
frm.GetOptions(out options); 
options |= FOS_PICKFOLDERS; 
frm.SetOptions(options); 

if (frm.Show(owner.Handle) == S_OK) { 
    IShellItem shellItem; 
    frm.GetResult(out shellItem); 
    IntPtr pszString; 
    shellItem.GetDisplayName(SIGDN_FILESYSPATH, out pszString); 
    this.Folder = Marshal.PtrToStringAuto(pszString); 
} 

código completo se puede encontrar here.

0

Consulte this answer por leetNightShade para una solución de trabajo.

Hay tres cosas que creo que hacen que esta solución sea mucho mejor que todas las demás.

  1. Es fácil de usar. Solo requiere que incluya dos archivos (que pueden combinarse de todos modos) en su proyecto.
  2. Se recurre a la norma FolderBrowserDialog cuando se utiliza en sistemas XP o anteriores.
  3. El autor concede permiso para usar el código para cualquier propósito que considere oportuno.

    No hay licencia tal como usted es libre de tomar y hacer con el código lo que quiera.

descargar el código here.

0

WindowsAPICodePack

var dlg = new Microsoft.WindowsAPICodePack.Dialogs.CommonOpenFileDialog(); 
dlg.IsFolderPicker = true; 
Cuestiones relacionadas