2008-09-05 8 views
26

En una aplicación C# .NET 3.5 (una combinación de WinForms y WPF) deseo permitir que el usuario seleccione una carpeta para importar una carga de datos. Por el momento, está usando System.Windows.Forms.FolderBrowserDialog, pero eso es un poco tonto. Principalmente porque no puede escribir la ruta en él (por lo que necesita asignar una unidad de red, en lugar de escribir una ruta UNC).Elegir una carpeta con .NET 3.5

Me gustaría algo más como el System.Windows.Forms.OpenFileDialog, pero para carpetas en lugar de archivos.

¿Qué puedo usar en su lugar? Una solución WinForms o WPF está bien, pero preferiría no invocar en la API de Windows si puedo evitarla.

Respuesta

36

¡No lo cree usted mismo! Se ha hecho. Puede usar FolderBrowserDialogEx - una derivada reutilizable del FolderBrowserDialog incorporado. Esta le permite escribir una ruta, incluso una ruta UNC. También puede buscar computadoras o impresoras con él. Funciona igual que el FBD incorporado, pero ... mejor.

Código fuente completo. Gratis. Licencia MS-Public.

FolderBrowserDialogEx

Código usarlo:

var dlg1 = new Ionic.Utils.FolderBrowserDialogEx(); 
dlg1.Description = "Select a folder to extract to:"; 
dlg1.ShowNewFolderButton = true; 
dlg1.ShowEditBox = true; 
//dlg1.NewStyle = false; 
dlg1.SelectedPath = txtExtractDirectory.Text; 
dlg1.ShowFullPathInEditBox = true; 
dlg1.RootFolder = System.Environment.SpecialFolder.MyComputer; 

// Show the FolderBrowserDialog. 
DialogResult result = dlg1.ShowDialog(); 
if (result == DialogResult.OK) 
{ 
    txtExtractDirectory.Text = dlg1.SelectedPath; 
} 
+30

Ahhhh! ¡Rosa brillante! Mis ojos ... mis pobres ojos ... – dthrasher

+11

mi hija hizo eso ... – Cheeso

+6

¿No es esa la excusa habitual? ;-) – Joey

1

Lamentablemente, no hay más diálogo que FolderBrowserDialog para la selección de carpetas. Necesita crear este diálogo usted mismo o usar PInvoke.

0

Hasta ahora, en base a la falta de respuestas a my identical question, supongo que la respuesta es rodar su propio cuadro de diálogo desde cero.

He visto cosas aquí y allá sobre la subclasificación de los cuadros de diálogo comunes de VB6 y creo que esto podría ser parte de la solución, pero nunca he visto nada sobre la modificación de lo que el diálogo cree que está seleccionando. Sería posible a través de .NET a través de PInvoke y algunos otros trucos, pero todavía no he visto el código que lo hace.

Yo sé es posible y no es Vista-específica porque Visual Studio ha hecho desde 2003. VS

Aquí está la esperanza de que alguien responde ya sea la suya o la mía!

0

Después de horas de búsqueda de una solución similar que encontré this answer por leetNightShade a a working solution.

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.