¿Ordenar FileListBox?

¿Es posible ordenar un filelistbox por la extensión de los archivos que contiene?.

1 Respuesta

Respuesta
1
Hay forma, lo que debes hacer es según el orden que desees, y a través de un For recorrer TODOS los Items del FileListBox e indicarle si es una por extensión lo mandé al primer lugar y así sucesivamente, sino has entendido, dime que extensiones quieres, y el orden, que te preparo algo para que lo puedas realizar...
Por ejemplo... quiero ordenar extensiones bat, exe, cfg y zip.
En orden inverso al de alfabéticamente.
Gracias.
Te comento que dentro del mismo FileListBox, no se pueden ordenar, ¿el motivo? La propiedad para listarlos es de sólo lectura, y no es posible hacerlo, dado esto te hice un ejemplo llevándolo a un listbox, ya ordenados, hay te va lo que necesitas:
Nota: todos los procedimientos en el mismo formulario

Primero que nada
Option Explicit
Option Compare Text
Dim ListExe(2500) As String
Dim ListBat(2500) As String
Dim ListZip(2500) As String
Dim ListCfg(2500) As String

Lo de 2500 es por poner algo, queda a tu criterio
Necesitaras, un DriveListBox(drvUnidad), un DirListBox(dirCarpetas), FileListBox(fleArchivos), ListBox (listOrdenados), CommandButton(cmdOrdenar)

Public Sub VaciaLista(unaLista() As String)
Dim x As Integer
Dim Fin As Integer
Fin = 2500
For x = 0 To Fin
    If unaLista(x) = "" Then Exit Sub
    unaLista(x) = ""
Next x
End Sub

Private Sub dirCarpetas_Change()
fleArchivos.Path = dirCarpetas.Path
End Sub
Private Sub drvUnidad_Change()
dirCarpetas.Path = drvUnidad.Drive
End Sub

Private Sub cmdOrdenar_Click()
Dim Formato As String * 4
Dim x As Integer, i As Integer, s As Integer
Dim ArchivosTotales As Integer
If fleArchivos.ListCount = 0 Then Exit Sub
ArchivosTotales = fleArchivos.ListCount - 1
VaciaLista ListExe
VaciaLista ListBat
VaciaLista ListZip
VaciaLista ListCfg
For i = 0 To ArchivosTotales
    Formato = Trim(Right(fleArchivos.List(i), 4))
    If Formato = ".zip" Then
       For x = 0 To 2500
           If ListZip(x) = "" Then
              ListZip(x) = fleArchivos.List(i)
              Exit For
           End If
       Next x
    End If
    If Formato = ".exe" Then
       For x = 0 To 2500
           If ListExe(x) = "" Then
              ListExe(x) = fleArchivos.List(i)
              Exit For
           End If
       Next x
    End If
    If Formato = ".cfg" Then
       For x = 0 To 2500
           If ListCfg(x) = "" Then
              ListCfg(x) = fleArchivos.List(i)
              Exit For
           End If
       Next x
    End If
    If Formato = ".bat" Then
       For x = 0 To 2500
           If ListBat(x) = "" Then
              ListBat(x) = fleArchivos.List(i)
              Exit For
           End If
       Next x
    End If
Next i
listOrdenados.Clear
For s = 0 To 2500
    If ListZip(s) = "" Then Exit For
    listOrdenados.AddItem ListZip(s)
Next s
s = 0
For s = 0 To 2500
    If ListExe(s) = "" Then Exit For
    listOrdenados.AddItem ListExe(s)
Next s
s = 0
For s = 0 To 2500
    If ListCfg(s) = "" Then Exit For
    listOrdenados.AddItem ListCfg(s)
Next s
s = 0
For s = 0 To 2500
    If ListBat(s) = "" Then Exit For
    listOrdenados.AddItem ListBat(s)
Next s
End Sub

Lamento el error de haberte dicho que si, y luego te diga que no, ya sabía que NO se podía, sólo que me entrevere y dije algo erróneo, espero sepas disculparme, sino, está bien, cualquier duda con esto la planteas,

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas