Pregunta

Estoy tratando de poner un filtro en mi C # OpenFileDialog que excluye ciertas extensiones de archivo. Por ejemplo, yo quiero que se muestran todos los archivos en un directorio que no son archivos .txt.

¿Hay una manera de hacer esto?

¿Fue útil?

Solución

No hay forma directa de hacerlo utilizando el BCL OpenFileDialog.

No puedo pensar en un par de opciones:

1) Hacer un filtro que sólo tiene todos los tipos usted desea apoyar. Esta sería mi recomendación, ya que es la forma más común de ir sobre este tipo de operación.

2) Utilizar algo en la línea de este costumbre aplicación OpenFileDialog. A continuación, podría reemplazar el método OnFileNameChanged () para potencialmente desactivar el botón "Abrir" si el archivo seleccionado tiene una extensión .txt.

3) permitir que el usuario elija un archivo .txt, vómito, a un diálogo de error, y volver a abrir el diálogo de archivo. Esto se siente torpe y no demasiado grande para mí, sin embargo ....

Otros consejos

No creo que esto es posible. La forma en que el filtro está configurado, es que se puede elegir qué archivos para mostrar, pero no creo que hay una manera de mostrar "Todos los archivos excepto ...". Ahora que lo pienso de ella, ¿ha visto alguna vez un archivo abierto de diálogo de Windows que tiene esto? No creo que he visto una.

Su mejor opción es dejar que ellos elijan todos los archivos, y luego pedir al usuario si seleccionan uno que no está permitido o filtrarla a todos los posibles archivos que se pueden tratar.

encontrado con la búsqueda de Google "OpenFileDialog"

Edit: Lo siento por no expandir en los aspectos de exclusión. Puede que no necesite ir a este extremo, pero sería satisfacer sus necesidades ....

  • Haga una búsqueda recursiva de directorios de todos los archivos que el usuario puede elegir. (Con suerte eso es un pequeño conjunto de carpetas.)
  • identificación inequívoca de las extensiones de los archivos. (System.IO.Path.GetExtension () y LINQ de .Distint () método puede funcionar bien aquí)
  • Eliminar la entrada ".txt" de la lista.
  • Construir una cadena de filtro de bucle a través de estas extensiones.

Me temo que esto no es posible. Ya sea que usted tiene que

  • A) incluyen una larga lista de todas las extensiones que se deben permitir, o

  • b) Permitir todas las extensiones, y luego usar una sencilla comprobación en el código que vuelve a abrir el cuadro de diálogo si el archivo seleccionado tiene extensión .txt.

Además, se puede proporcionar un poco más de contexto para esta pregunta? Tengo problemas previendo un escenario en el que podría necesitar explícitamente a excluir una cierta extensión. No se puede conseguir probablemente lejos con sólo un filtro (y tal vez un poco de comprobación en el código) en casi todas las situaciones.

Aquí hay un enfoque completamente diferente, lo que es poco probable que utilice.

En lugar de utilizar OpenFileDialog, analizar las características específicas que necesita y crear su propio cuadro de diálogo. Desde aquí se puede proporcionar cualquier filtrado desea, pero entonces la dificultad deja atrás a la implementación y mantenimiento de la nueva interfaz de usuario.

No sugiero que lo haga, pero a veces los usuarios son bastante insistente en lo que necesitan.

Otra alternativa: En lugar de utilizar un cuadro de diálogo, llegar a algo completamente diferente que encaja muy bien dentro de la aplicación. Esto no puede ser posible, pero entonces no sabemos mucho acerca de la aplicación.

No se puede establecer un filtro para excluir extensiones de los diálogos de archivo.

Se puede sin embargo poner en práctica un delegado para el evento FileOk en el diálogo. Este evento se activa justo antes de que el archivo se aceptará el usuario seleccionado, y los argumentos del evento proporcionan una propiedad Cancel que se puede configurar para no permitir la selección.

No es tan elegante como hacer realidad los archivos equivocados invisible, pero le permitirá no permitir la selección del tipo equivocado de archivo.

PS:. No se olvide de dar la retroalimentación de los usuarios por qué el archivo no fue aceptada, de lo contrario pueden preguntarse por qué el diálogo no se cierra cuando van a recoger un archivo 'txt'

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