Pregunta

¿Hay una manera de modificar el comportamiento de la OpenFileDialog para que se vea el interior de los archivos de la carpeta que se abre a continuación, y hace caso omiso de ciertas personas en función de su contenido?

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

A partir de la documentación, está el HookProc pero no estoy muy seguro de cómo me gustaría usar.

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

Gracias!

¿Fue útil?

Solución

No descartaría la complejidad de la OpenFileDialog. No es tan fácil de construir uno que realmente funciona. Cuando usted construye su propia, que no es el diálogo "normal" y como resultado se confunde a los usuarios. Esto es cierto incluso si lo hace bien, lo cual es difícil. Así que me gustaría sugerir que se adhieren a extender lo que ya existe, en lugar de escribir algo nuevo.

este artículo para obtener una extensión de OFD que pudiera / podría ser ajustado para hacer exactamente lo que quiere. Hay una devolución de llamada que se escribe en C # que responde a la selección de rutas.

Relacionado: FolderBrowserDialogEx es una extensión similar sobre FolderBrowserDialog. A pesar del nombre, puede configurarlo para buscar archivos, así como las 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 se puede hacer lo que tiene que hacer. Por ejemplo, mirar dentro de los archivos dentro de una carpeta y rellenar la lista de archivos para mostrar únicamente con los archivos.


Otra opción que podría considerar es la href="http://www.ookii.org/software/dialogs/" rel="nofollow noreferrer"> biblioteca de diálogo . Esta es una implementación de código abierto de la OpenFileDialog, e incluye contenedores COM para todas las cosas nuevas de diálogo en Vista. El uso de esa biblioteca que puede hacer estallar una Vista OpenFileDialog y recibir eventos de la IFileDialogEvents interfaz, en código C #. Uno de estos eventos es OnFolderChange (). Dentro del manejador se le puede llamar IFolder.GetFolder () que le consiga un IShellItem , que le da la carpeta que el usuario está cambiando a. El siguiente paso sería que detallar y potencialmente filtrado del conjunto de archivos, que es un ejercicio que dejaré al lector ...

Otros consejos

No, tendría que poner en práctica su propia funcionalidad para eso. Pero para ser honesto, el OpenFileDialog realmente no hace mucho de todos modos. Para ser honesto, sí, que probablemente se podría enganchar en él, pero que estaría haciendo un montón de trabajo para nada cuando el verdadero trabajo es inspeccionar el contenido de los archivos y luego usted puede escribir su propia clase OpenFileDialog sencilla en la parte superior de que.

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

Cómo listar el contenido de un carpeta .zip en c #?

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

Puede utilizar probablemente el Código Paquete API de Windows (viene con la fuente). La característica de los cuadros de diálogo de archivos comunes expone una funcionalidad mucho más de los diálogos de archivo que las versiones en Winforms / WPF.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top