-
Buenas,
Les pego un cacho de codigo:
Private Sub List1_Click()
For i = 1 To n
If Categorias(i + 1) = List1.List(List1.ListIndex) Then
For l = 0 To List(i + 1).ListCount
List100.AddItem List(i + 1).List(l)
Next l
End If
Next i
End Sub
Y tengo un problema, el List(i + 1).loquesea
Me da problema, es decir, no admite List(i + 1) ¿Como podría hacer eso?
Por otra parte tengo otra preguntilla, es que no se me ha ocurrido como hacerlo:
Veamos, tengo que importar listas de datos, desde distintos archivos de texto, y la cuestion es que no se cuantos archivos de texto tengo, por lo que no se cuantas List tengo que crear. No se como puedo hacer para crear nuevos objetos List desde tiempo de ejecución, en funcion del numero de archivo de texto que haya en un determinado lugar. Así que he optado por crear unas 20 List (creyendo que nunca supere ese numero, pues sino cascará) y luego pues lo voy metiendo. El problema es que es algo chapucero, y no se si se os ocurre otra manera de hacerlo si es que no se pueden crear nuevas List en tiempo de ejecución.
Por otra parte, lei en una web que crear otro objeto (image, por ejemplo) en tiempo de ejecución, genera una perdida de rendimiento, o algo similar.
MUCHAS GRACIAS POR TODO.
-
Hola,
En cuanto a lo primero no se exactamente que quieres lograr con ese codigo, si puedes explicar que es lo que haces o quieres hacer...
Para lo segundo :
Yo me crearia un formulario con un SSTab (Añadir componente Microsoft Tabbed Dialog Control 6.0) con la propiedad Tabs a 1 y dentro de esa unica pestaña colocaria un ListBox con la propiedad Index a 0.
En el Form_Load del formulario llamaria a una funcion que me buscara los archivos .txt que existen en el directorio deseado y me crearia un arrayque guarde los nombres de esos archivos.
Por ultimo llamaria a una funcion que se encargaria de añadir los list necesarios creando tantas pestañas al tab como fueran necesarias, por ejemplo una nueva pestaña cuando existan dos list en el tab activo y despues ayudandome del array con nombres cargaria los datos en las listas.
-
Hola, primero que anda esta mal el codigo porque para poder hacer algo como List(i + 1).ListCount necesitas que el List sea una matriz de controle..pero igualmente no entendi lo que queres hacer...si lo explicas a fondo estaria mejor...
saludos.
-
Vale, a ver, sobre la primera parte:
Imaginemos: Tenemos un fichero de texto en el que el programa lee las
entradas que tiene. De ahí saca el nombre de X ficheros que necesitará
abrir posteriormente. Imaginemos que dentro hay:
A
B
Luego generamos la matriz Categorías en funcion del numero de entradas (en este caso 2). Ahora vamos a crear tantos list como categorias haya (en este caso no se hacer ese paso, como me menciona Naisha, pues se me hace algo lioso. Ya lo investigare con tiempo. Pero de momento imaginemos que hago la chapuza (creo 20 list). Entonces, En funcion de la matriz categorías. Primero lo que hago es abrir el primer fichero (Open ...la primera categoria (A) ..for input..) y ahora estamos dentro del primer fichero A, que tiene:
1
2
3
4
5
Por ejemplo. Entonces lo que debemos hacer es a la List añadirle las entradas del fichero "A".
Luego pasamos a la segunda categoria (B) que tiene:
22
23
34
Y le añadimos (AddItem) esas entradas del fichero (B) al List siguiente.
COmo ya no hay mas categorias, no se rellenarán más List.
Entonces, ahora viene lo de List1_Click()
Tengo una Lista mostrando las categorias, entonces, cuando se pulse sobre una entrada de la Lista. Lo que haremos será hacer que cuando coincida la matriz Categorias con la entrada marcada en la Lista: Supongamos que pulsamos en la Lista Categorias en B. Comparará primero: A = B (Falso), B = B (Verdadero) entonces copiará La Lista de B en una Lista General.
Daremos paso a copiar la lista B (que contiene 22,23,34) a la Lista general (Llamada 100 en mi caso).
Pero no me deja hacer lo de List(i+1) etc... He buscado en google como hacer matriz de controles con List pero no veo nada.
¿Que se os ocurre?
Si os cuesta entender lo que he escrito, ya sea porque igual es algo abstracto, o porque me he liado o lo que sea, os paso el codigo entero y los forms en un rar.
Un saludo.
PD: Sobre lo de Naisha. hasta lo de "Por ultimo" lo pillo todo. Pero luego, "me encargaría de añadir los list necesarios creando tantas pestañas al tab como fueran necesarias...." ahí me pierdo totalmente.
-
bueno ahora esta mejor explicado pero por ahi no se si entendi algo...por ejemplo proba este codigo lo hice asi nomas...pero es para mostrarte como seria mas o menos....con este codigo primero lees un archivo donde estan las categorias...despues agrega tantos listbox como categorias tengas y en cada listbox agrega las correspondientes categorias que contiene segun lo que se cargo en el primer listbox...
Código:
Option Explicit
Private WithEvents MiList As ListBox
Private Sub Form_Load()
Dim Categorias() As String, SubCategorias() As String
Dim Num As Integer, i As Integer, a As Integer
Dim Datos As String
Num = FreeFile
Open "C:\categorias.txt" For Binary Access Read As #Num 'abrimos el archivo
Datos = String(LOF(Num), 0) 'creamos un buffer con la cantidad de bytes del archivo
Get #Num, , Datos 'ponemos todo el contenido del archivo en la variable Datos
Close #Num 'cerramos el archivo
Categorias() = Split(Datos, vbCrLf) 'aca se llena el array con las lineas del txt
For i = 0 To UBound(Categorias)
List1.AddItem Categorias(i) 'llenamos el list principal con la matriz...
Set MiList = Controls.Add("VB.ListBox", "MiList" & CStr(i))
With MiList
.Visible = True
.Top = 4000
.Left = 0 + (i * 2000)
.Width = 2000
.Height = 2000
End With
Open "C:\" & Categorias(i) & ".txt" For Binary Access Read As #Num 'abrimos el archivo
Datos = String(LOF(Num), 0) 'creamos un buffer con la cantidad de bytes del archivo
Get #Num, , Datos 'ponemos todo el contenido del archivo en la variable Datos
Close #Num 'cerramos el archivo
SubCategorias() = Split(Datos, vbCrLf) 'aca se llena el
For a = 0 To UBound(SubCategorias)
MiList.AddItem SubCategorias(a)
Next a
Next i
End Sub
saludos.
-
Buenas jefazo,
He estado probando el codigo, y funciona bien. El unico problema que tengo es que no se como hacer para elegir cada una de las listas en funcion de que se pulse una u otra categoria del List1.
Es decir, yo pondría visible = False, para que no se viesen las List. Y lo que tendría que hacer es , cuando pulsemos una categoria de la List1, que en una List 2 se carguen las SubCategorias (buscandolo en las MiList).
Pero es que he probado a hacer MiList(1).List etc y nada.
No se me ocurre.
Es que es una putada no entender bien que se hace, y eso que esta muy bien explicado. Pero al no ser la MiList un objeto en si, sino algo que esta en el procedimiento y que se crea luego, me cuesta ver esas cosillas.
Es como si me interesa de repente modificar y eliminar o añadir pues por ejemplo una SubCategoria más a la 2ª lista creada imaginemos. No se luego como hacer MiList(2).AddItem SubcategoriaNueva. o .removeItem etc..
Muchas gracias.