Introducción:
Voy a empezar mostrándote un par de capturas del formulario en tiempo de
ejecución, con idea de que te hagas una idea de cómo "queda". Estas capturas
están hechas en un emulador de Smartphone para Windows Mobile 6.0, que en
realidad ahora se llama Windows Mobile 6.0 Standard.
En la figura 1 tienes el aspecto mostrando varias carpetas y varios ficheros.
Figura 1. El formulario OpenFileDialog en ejecución
En la figura 2 puedes ver el menú de la derecha, en el que puedes comprobar
que se tienen en cuenta las extensiones que se hayan indicado (aunque sin el
texto descriptivo).
Figura 2. Las opciones del menú del formulario
En ese menú además de poder indicar la extensión a mostrar (por ahora
solo soporta mostrar ficheros de un tipo a la vez), tienes opciones para
abrir (seleccionar) el fichero, (que también puedes seleccionar con el botón
central), otra opción para cambiar de directorio, cancelar (y cerrar esa
ventana) y varias opciones para ir directamente a 4 directorios
predefinidos.
Las opciones de Abrir y Cambiar a se usarán
para seleccionar un fichero o cambiar a un directorio.
Y solo estará habilitada una u otra. Esto se sabe según el elemento que está
actualmente seleccionado.
Si ese elemento es un directorio, se habilita la opción Cambiar a,
además de que al pulsar en el botón central se cambiará al directorio
seleccionado, para ir al directorio anterior, pulsa en el primer directorio (en
teoría también pulsando en el botón Arriba, pero por razones extrañas no siempre
está habilitado... a ver si me pongo a averiguar porqué pasa eso).
Si el elemento selecciona es un fichero, la opción que estará habilitada es
Abrir (o el texto que se haya indicado en la clase que llama a
este formulario), y al igual que ocurre con la otra opción, al pulsar en el
botón central, se seleccionará el fichero y ese será el valor que se devuelva en
la propiedad FileName.
Como puedes ver en el código que te muestro más abajo, cuando se asigna el
valor a la propiedad Filter, se crean los menús de forma
dinámica, bueno, en realidad se crean los submenús del menú Filtro.
Como te comentaba, por ahora solo se tienen en cuenta las extensiones, pero hay
que aceptar los valores a los que estamos ya acostumbrados que es indicando
primero la descripción y después la extensión (o extensiones).
Aunque en este "cuadro de diálogo" no tiene la misma funcionalidad que el
componente "normal", ya que si en la extensión se indica "*.mp3;*.wav",
se agregarán dos opciones al menú Filtro; y por consiguiente,
si quieres mostrar los ficheros que coinciden con las dos extensiones... pues...
simplemente no puedes, o muestras los ficheros de un tipo o muestras los de
otro.
De todas formas, no es complicado hacer ese cambio, pero como lo único que
hará es retardar más el "relleno" del contenido del formulario, pues... he
preferido dejar cada extensión de forma independiente.
El método leerDirs es el que se encarga de hacer todo el
trabajo, ya que se encarga de leer los directorios del directorio que se ha
indicado en el parámetro y también de mostrar todos los ficheros que haya en ese
directorio.
En esta versión para el .NET 2.0 (Visual Studio 2005/2008), se guarda el
objeto del directorio o del fichero en la propiedad Tag del
elemento del ListView. Ese objeto después se usará para acceder
al elemento adecuado, según sea un directorio o un fichero (ver el código de
selección de un fichero o de cambio de directorio).
El formulario también tiene un control imageList en el que
están las imágenes a mostrar.
Actualmente solo tengo 4:
0- El icono para los ficheros de sonido ()
1- El icono para los demás tipos ()
2- El icono de los directorios normales (no el actual) ()
3- El icono del directorio raíz ()
Estas imágenes están el formato PNG y están sacadas del fichero de imágenes
que se incluye con Visual Studio 2005 o superior. (Puedes copiar estas que te
muestro, ya que son las mismas que yo he utilizado.)
Y básicamente esto es todo... cuando publique el código de ejemplo de la
utilidad que reproduce los ficheros .mp3 podrás ver cómo usarlo, pero en
realidad es muy sencillo y es el mismo código que te mostré en
la página principal de
esta clase OpenFileDialog.
Espero que te sea de utilidad.
Nos vemos.
Guillermo
Espacios de nombres usados en el código de este artículo:
System.Windows.Forms
System.Drawing
System.IO