DirListBox - Propiedades, métodos y eventos
Descripción y propiedades:
Permite visualizar los directorios de una unidad determinada.
Propiedad Path
La propiedad mas importante se llama Path. A esta propiedad se le debe indicar la ruta para que cargue la lista de directorios
Por ejemplo, para poder visualizar las carpetas, cuando seleccionamos una unidad en un control Drive, se haría de la siguiente forma:
Colocar un control Drive1 y un control Dir1 y pegar el siguiente código en el formulario:
- Option Explicit
-
- Private Sub Drive1_Change()
-
-
-
- Dir1.Path = Drive1.Drive
-
- End Sub
-
- Private Sub Form_Load()
- MsgBox "Cambia la unidad para que el Dir1 actualice el la propiedad Path"
- End Sub
Si ejecutás el ejemplo anterior, podés ver que al cambiar de unidad en el control Drive se despliegan los directorios en el control Dir1. Pero también seguramente observaste que si seleccionás por ejemplo una unidad que no se encuentra disponible, como por ejemplo la disquetera, unidad de CD/DVD, y esta no contiene un diskette o CD, o se encuentra averiada, o no lo puede leer por algún otro motivo, se producirá un error 68 en tiempo de ejecución: "El dispositivo no está listo".
Para evitar esto podemos utilizar una simple rutina de error como la siguiente para solucionar el problema mediante un controlador de error.
- Option Explicit
-
- Private Sub Drive1_Change()
-
- On Error GoTo MensajeError
-
-
- Dir1.Path = Drive1.Drive
-
-
- Exit Sub
-
- MensajeError:
-
-
-
-
- If Err.Number = 68 Then
- MsgBox "La unidad seleccionada no está disponible", vbInformation
- Resume Next
- Else
-
- MsgBox Err.Description, vbCritical, "Otro error"
- End If
-
- End Sub
-
- Private Sub Form_Load()
- MsgBox "Selecciona una unidad CD/DVD sin ningún CD/DVD"
- End Sub
... de esta manera controlamos el error 68 mostrando un mensaje, y con la instrucción Resume Next, le decimos a vb que prosiga la ejecución del programa. Nota : Si no quisiéramos continuar la ejecución de la línea siguiente a la que produjo el error, simplemente podemos quitar la instrucción Resume Next.
DirListBox no enlazado a un DriveListBox
También a diferencia del ejemplo anterior, en muchos casos podríamos utilizar un Dir1 sin un control Drive.
Entonces para cambiar la propiedad Path del control DirListBox sin usar el control Drive, simplemente debemos pasarle la letra de la unidad o cualquier ruta válida que queramos a la propiedad Path, por ejemplo de esta manera:
Colocar dos botones y un Dir1. Pegar el siguiente código en el formulario
- Option Explicit
-
- Private Sub Command1_Click()
- Dir1.Path = "c:"
- End Sub
-
- Private Sub Command2_Click()
- Dir1.Path = "c:windows"
- End Sub
-
- Private Sub Form_Load()
- Command1.Caption = "c:"
- Command2.Caption = "c:windows"
- End Sub
Importante
Al igual que en el código anterior, donde se producía un error al intentar acceder a una unidad no disponible, si se le pasa a la propiedad path del Dirlistbox, una ruta que no existe, el programa generará un error en tiempo de ejecución. El error es el siguiente : Error de ruta de acceso
Para solucionarlo, podemos implementar una rutina o controlador de error , que verifique el numero 76. Si el error es el 76, entonces mostramos al usuario un mensaje para que sepa que la ruta indicada no es válida, y de esta forma, no se caiga el programa.
Este ejemplo demuestra lo dicho anteriormente
Colocar un botón y un Dir1. Al presionar el botón, se desplegará un cuadro de diálogo InputBox para escribir el path, y como demostración deberás escribir una ruta no válida para generar el error. Luego se mostrará un mensaje de información de que el path no es válido.
- Option Explicit
-
- Private Sub Command1_Click()
-
- On Error GoTo error_handler
-
- Dim sRuta As String
-
-
- sRuta = InputBox("Escribir una ruta que no exista en la pc")
-
-
-
-
- Dir1.Path = sRuta
-
-
- Exit Sub
-
-
- error_handler:
- If Err.Number = 76 Then
- MsgBox "La ruta seleccionada no es válida, compruebe que la haya escrito correctamente", vbCritical
- Else
- MsgBox Err.Description, vbCritical
- End If
- End Sub
-
-
- Private Sub Form_Load()
- Command1.Caption = "Escribir ruta"
- End Sub
Propiedad ListCount, y objeto List
Con ListCount y el objeto List, podemos acceder al contenido actualmente cargado en el Dir, es decir a los directorios. Para recorrer todo el contenido , se debe utilizar un bucle For Next. Por ejemplo lo siguiente, recorre todo el contenido del control, y crea un archivo de texto con las rutas. El archivo de texto se creará en una unidad c: con el nombre 'Rutas.txt'
- Option Explicit
-
-
- Private Sub Command1_Click()
-
- On Error GoTo error_handler
-
- Dim f As Integer
- f = FreeFile
- Open "c:rutas.txt" For Output As #1
-
-
- Dim i As Integer
- For i = 0 To Dir1.ListCount - 1
-
- Print #1, Dir1.List(i)
- Next
-
- Close #f
-
-
- MsgBox "Archivo guardado en: c:", vbInformation
-
-
- Exit Sub
- error_handler:
- MsgBox Err.Description, vbCritical, "error al crear el archivo"
- End Sub
-
- Private Sub Form_Load()
- Command1.Caption = "Guardar rutas en archivo de texto"
- End Sub
Nota Las demás propiedades, son similares a la de los demás controles.
Eventos
Al igual que el control Drive, el control Dir tiene un evento que es el mas importantes llamado Change, y que se disparará o ejecutará cada vez que el control Dir cambie la ruta, es decir la propiedad Path.
El siguiente ejemplo muestra un mensaje cada vez que seleccionamos un directorio diferente en el control.
- Option Explicit
-
- Private Sub Dir1_Change()
- MsgBox Dir1.Path, vbInformation
- End Sub
Mostrar la cantidad de carpetas y directorios
Si quisiéramos saber la cantidad de directorios que muestra el control Dir, podemos usar la propiedad ListCount.
Ejemplo:
- Option Explicit
-
- Private Sub Dir1_Change()
- MsgBox "El directorio seleccionado tiene: " & Dir1.ListCount & " directorios"
- End Sub