Como usar OpenFileDialog en WPF


Bienvenid@ lector/a, En esta nueva entrada veremos cómo mostrar y configurar el componente OpenFileDialog, el cual es un cuadro de dialogo pre configurado. El componente OpenFileDialog permite al usuario examinar todas las carpetas de su equipo o de cualquier equipo de la red con la posibilidad de seleccionar uno o más archivos para abrirlos. Este cuadro de diálogo devuelve la ruta de acceso y el nombre del o los archivos que se seleccionó.

Imagen 1: Dialogo emergente de archivos

Existen dos formas en los que se puede implementar este elemento. En primer lugar este componente puede abrir un archivo a la vez y en segundo lugar este puede abrir más de un archivo a la vez.

Cabe destacar que cuando se configura para que pueda abrir múltiples archivos estas rutas se almacenan en un arreglo unidimensional, esto no pasa cuando se utiliza con la configuración por defecto que tiene ya que la configuración default solo permite traer un archivo es decir solo almacena una ruta de archivo.


En la imagen 2 se puede apreciar el diseño que implementare para ejemplificar el funcionamiento de ambas opciones de configuración de elemento OpenFileDialog

Imagen 2: Interfaz de prueba.

En primer lugar el componente OpenFileDialog siempre estará relacionado con algún evento proveniente de un botón u otro evento que el usuario desee.

Al configurar los elementos se le pueden aplicar algunos otras propiedades como la de un filtro por extensiones, lo cual facilita mucho más la búsqueda de archivos. En la Imagen 3 se puede apreciar que se implementa un filtro básico que luego en la búsqueda de archivos se extiende para que se pueda buscar por cada extensión.

Imagen 3: Filtro básico de la aplicación.

Imagen 4: Filtro aplicado por código.

A continuación se desglosará el código para que sean apreciadas las partes más importantes del código que es bastante sencillo.

Inicialización de los filtros, estos son variables globales que se implementaran más adelante en el cogido.

1:      String[] seleccion = { "Ningun", "Por Imagen", "Por texto", "Por video" };  
2:      String[] filtro = { "","Todas las imagenes|*jpg;*png;*bmp|JPG|*jpg|PNG|*png|BMP|*bmp",  
3:                  "Todos los textos|*txt;*doc;*docx;*xls|TXT|*txt|DOC|*doc;*docx|XLS|*xls",  
4:                  "Todos los videos|*mp4;*avi;*mpeg;*mov;*wmv;*flv|MP4|*mp4|AVI|*avi|MPEG|*mpeg|MOV|*mov|WMV|*wmv|FLV|*flv"                  
5:                  };  


Método que carga solo un archivo, en este fragmente se aprecia que se le puede aplicar un filtro como no. El IF que pregunta si "el_filtro" es diferente (!=) de 0, quiere decir que el Combobox tiene un elemento seleccionado diferente a "Nigun"

1:      private void btn_dlg_UN_Click(object sender, RoutedEventArgs e)  
2:      {  
3:        OpenFileDialog dlg1 = new OpenFileDialog();  
4:        int el_filtro = filtro1.SelectedIndex;  
5:        if (el_filtro != 0)  
6:          dlg1.Filter = filtro[el_filtro];  
7:        //Console.WriteLine("Aplicando filtro"+ filtro[el_filtro]);//  
8:        if (dlg1.ShowDialog() == true) {  
9:          this.txt_UN.AppendText(dlg1.FileName);  
10:        }  
11:      }  


De igual modo con el anterior al método donde se configura para múltiples archivos varia muy poco, como por ejemplo en la opción "Mutiselect" se deja como "true" para que se puedan seleccionar más de una elemento. Al igual que el anterior es posible aplicarle un filtro.

Lo diferente de esto es que en vez de solo retornar un solo elemento este devuelve un arreglo de elementos y para poder capturarlos a todos se hace a través de un Loop en este caso un foreach, donde se despeja el nombre sin la extensión mediante System.IO.Path.GetFileNameWithoutExtension().


1:      private void btn_dlg_MUL_Click(object sender, RoutedEventArgs e)  
2:      {  
3:        OpenFileDialog dlg2 = new OpenFileDialog();  
4:        dlg2.Multiselect = true;  
5:        int el_filtro = filtro2.SelectedIndex;  
6:        if (el_filtro != 0)  
7:          dlg2.Filter = filtro[el_filtro];  
8:        //Console.WriteLine("Aplicando filtro"+ filtro[el_filtro]);//  
9:        /*Si lo utilizas con Windows Form el if condicional se cambia por  
10:          if(dlg2.ShowDialog() == DialogResult.OK){}  
11:        */  
12:        if (dlg2.ShowDialog() == true)  
13:        {  
14:          foreach (String s in dlg2.FileNames)  
15:          {  
16:            String nombre = System.IO.Path.GetFileNameWithoutExtension(s);  
17:            this.txt_MUL.AppendText(string.Format("\n---\nNombre:{0}\nRuta:{1}",nombre,s));  
18:          }  
19:        }  
20:      }  


Puedes descargar el ejemplo desde el siguiente LINK


Este sitio fue creado en primera instancia como un lugar donde ir acumulando información y/o apuntes que considere de utilidad para un futuro cercano, pero a medida que ha avanzado el tiempo este lugar se a vuelto un punto de encuentro para muchas personas que se están iniciando en el mundo de la programación, es por eso que si estás leyendo esto estas invitado a participar en de esta comunidad que día a día va creciendo. Si estás dispuesto a cooperar te sugiero que dejes tus inquietudes, dudas o aportes en la caja de comentario de cualquiera de las entradas del blog o haciendo directamente desde el formulario de contacto que puede encontrar en la página de inicio y responderé a la brevedad.

Entradas más populares de este blog

Convertir decimal a binario, octal y hexadecima

Crear servicio web en Visual C# (WebService)