2009-06-01 9 views
7

¿Hay alguna manera de modificar el comportamiento de OpenFileDialog para que se vea dentro de los archivos en la carpeta en la que se abre y luego ignore ciertos en función de su contenido?¿Filtrar los archivos que se muestran en OpenFileDialog en función del contenido?

Un ejemplo sería abrir una carpeta llena de archivos Zip pero solo mostrar los que contienen un determinado archivo.

De la documentación, está el HookProc, pero no estoy muy seguro de cómo lo usaría.

Tenga en cuenta que si es posible, me doy cuenta de que será una operación relativamente lenta. Por el momento no estoy preocupado por el rendimiento.

Gracias!

Respuesta

3

No descartaría la complejidad de OpenFileDialog. No es tan fácil construir uno que realmente funcione. Cuando construyes el tuyo propio, no es el diálogo "normal" y, como resultado, confunde a los usuarios. Esto es cierto incluso si lo haces bien, lo cual es difícil. Así que te sugiero que te limites a extender lo que ya está allí, en lugar de escribir algo nuevo.

Compruebe this article for an extension of OFD que podría/podría modificarse para hacer exactamente lo que desea. Hay una devolución de llamada que escribe en C# que responde a la selección de ruta.

Relacionados: FolderBrowserDialogEx es una extensión similar en FolderBrowserDialog. A pesar del nombre, puede configurarlo para buscar archivos, así como carpetas. Hay una devolución de llamada que se invoca cuando se selecciona algo (una carpeta, un archivo), y dentro de esa devolución de llamada puede hacer lo que necesita hacer. Por ejemplo, eche un vistazo dentro de los archivos dentro de una carpeta y llene la lista de archivos para mostrar solo con esos archivos.


Otra opción que puede considerar es dialog library from Ookii. Esta es una implementación de código abierto de OpenFileDialog, e incluye envolturas COM para todo el nuevo diálogo en Vista. Utilizando esa biblioteca puede abrir Vista OpenFileDialog y recibir eventos desde la interfaz IFileDialogEvents, en código C#. Uno de esos eventos es OnFolderChange(). Dentro del controlador, puede llamar a IFolder.GetFolder(), que le proporcionará un IShellItem, que le proporciona la carpeta en la que el usuario está cambiando. El siguiente paso sería detallar y potencialmente filtrar el conjunto de archivos, que es un ejercicio que dejaré al lector ...

+0

¡muy interesante! Lo veré mañana. ¡Gracias! – djcouchycouch

1

No, tendría que implementar su propia funcionalidad para eso. Pero para ser honesto, OpenFileDialog realmente no hace mucho de todos modos. Para ser sincero, sí, es probable que te enganches, pero estarías haciendo un montón de trabajo en vano cuando el verdadero trabajo es inspeccionar el contenido de los archivos y luego puedes escribir tu propia clase simple de OpenFileDialog encima de ese.

Puede que le resulte útil a esta pregunta con respecto lista de contenidos de los archivos zip:

How to list the contents of a .zip folder in c#?

(Nota, usted podría enhebrar para mejorar el rendimiento, simplemente no ocupan muchos hilos)

0

Probablemente pueda usar el paquete de código API de Windows (viene con la fuente). La característica de diálogo de archivos comunes expone mucha más funcionalidad de diálogos de archivos que las versiones en Winforms/WPF.

http://code.msdn.microsoft.com/WindowsAPICodePack

Cuestiones relacionadas