problema con imagelist y listview

Iniciado por SRVAM, 24 Agosto 2009, 15:46 PM

0 Miembros y 1 Visitante están viendo este tema.

SRVAM

bueno, tengo un problema al poner iconos en un listview.

lo que hago es cargar al principio los iconos en un imagelist, y lego cuando añado los items al listview en la parte de icono le digo que ponga el listimage(x) del imagelist.

pero a la hora de ejecutar el programa me da un fallo que dice que para usar el imagelist primero debo inicializarlo.

espero que alguien pueda ayudare. aqui dejo el codigo para que lo veais

Código (vb) [Seleccionar]
Public Function cargar_imgs()

Dim indice As Integer
Dim img As ListImage
Dim directorio As String

directorio = App.path & "\iconos"

For indice = 1 To 8

   
   Form5.Picture1.Picture = LoadPicture(directorio & "\" & indice & ".jpg")
   Set img = Form5.ImageList1.ListImages.Add(indice, , Form5.Picture1.Picture)

Next indice



End Function


Código (vb) [Seleccionar]
Public Function llenar_list()

Dim contador As Integer
Dim item As ListItem
Dim tamaño As Double

Form5.ListView1.ColumnHeaders.Clear

Form5.ftp.GetTextDirListing "*.*"
Form5.ListView1.ListItems.Clear

contador = 0

Form5.ListView1.ColumnHeaders.Add , , "Files", Form5.ListView1.Width / 2
Form5.ListView1.ColumnHeaders.Add , , "Size", Form5.ListView1.Width / 2

Do While Form5.ftp.GetFilename(contador) <> ""
   
   If InStr(LCase(Form5.ftp.GetFilename(contador)), ".jpg") <> 0 Then
   
       Set item = Form5.ListView1.ListItems.Add(, , Form5.ftp.GetFilename(contador), Form5.ImageList1.ListImages(1))
   
   End If
   
   If InStr(LCase(Form5.ftp.GetFilename(contador)), ".rar") <> 0 Then
   
       Set item = Form5.ListView1.ListItems.Add(, , Form5.ftp.GetFilename(contador), Form5.ImageList1.ListImages(6))
   
   End If
   
   If InStr(LCase(Form5.ftp.GetFilename(contador)), ".txt") <> 0 Then
   
       Set item = Form5.ListView1.ListItems.Add(, , Form5.ftp.GetFilename(contador), Form5.ImageList1.ListImages(7))
   
   End If
   
   If InStr(LCase(Form5.ftp.GetFilename(contador)), ".pdf") <> 0 Then
   
       Set item = Form5.ListView1.ListItems.Add(, , Form5.ftp.GetFilename(contador), Form5.ImageList1.ListImages(8))
   
   End If
   
   If InStr(LCase(Form5.ftp.GetFilename(contador)), ".mp3") <> 0 Then
   
       Set item = Form5.ListView1.ListItems.Add(, , Form5.ftp.GetFilename(contador), Form5.ImageList1.ListImages(2))
   
   End If
   
   If InStr(LCase(Form5.ftp.GetFilename(contador)), ".avi") <> 0 Or InStr(LCase(Form5.ftp.GetFilename(contador)), ".mpg") <> 0 Or InStr(LCase(Form5.ftp.GetFilename(contador)), ".mpeg") <> 0 Then
   
       Set item = Form5.ListView1.ListItems.Add(, , Form5.ftp.GetFilename(contador), Form5.ImageList1.ListImages(3))
   
   End If
   
    If InStr(LCase(Form5.ftp.GetFilename(contador)), ".doc") <> 0 Then
   
       Set item = Form5.ListView1.ListItems.Add(, , Form5.ftp.GetFilename(contador), Form5.ImageList1.ListImages(6))
   
   End If
   
   
   
   tamaño = Val(Form5.ftp.GetSize(contador)) / 1022
   item.SubItems(1) = Val(Mid(Str(tamaño), 1, 4)) & " " & "Kb"
   
   contador = contador + 1
   
Loop

End Function


bueno, se que el codigo se peude optimizar y el programa esta hecho con chilkatftp2, no con un API.
pero cualquier critica y consejo sera bien recibido

saludos
C# Programmer

-Estudiante MCTS .NET Framework 3.5-


SRVAM

sigue sin funcionarme, sera una tonteria pero no lo veo. me da un error que dice que el imagelist debe ser inicializado antes de usarlo. pero no se a que se refiere con eso :S
C# Programmer

-Estudiante MCTS .NET Framework 3.5-

MCKSys Argentina

Te pregunto: El Form5 que aparece... está cargado???

Si haces referencia a un form desde un modulo, te conviene usar una variable global (a nivel modulo), que contenga una instancia del formulario

Eso seria:


Dim f5 as Form5


Luego, f5 es un objeto del tipo Form, que aun no ha sido instanciado, pero que puede ser accedido desde cualquier punto de tu aplicación.

Para intanciarlo, cargarlo y mostrarlo (por ej.), basta con hacer:


Set f5 = New Form5
Load f5
f5.Show


Creo que es por eso que te sale el error.

Saludos!


MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


seba123neo

Hola, ¿ al listview le enlazaste el ImageList desde las propiedades ? igualmente para cargar las imagenes lo podes hacer en tiempo de diseño, no cargar las imagenes en tiempo de ejecución.

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

SRVAM

el form 5 si esta activado, de echo es el main.

lo que he hecho es en vez de cargar las imagenes en ejecucion en el imagelist las he añadido en el diseño, pero aun asi no me funciona. el codigo que tengo seria este (pero para un icono, todavia no hago ningun bucle para saber que tipo de archivo es y elegir un icono u otro)

Código (vb) [Seleccionar]
Public Function llenar_list()

Dim contador As Integer
Dim item As ListItem
Dim tamaño As Double

Form5.ListView1.ColumnHeaders.Clear

Form5.ftp.GetTextDirListing "*.*"
Form5.ListView1.ListItems.Clear

contador = 0

Form5.ListView1.ColumnHeaders.Add , , "Files", Form5.ListView1.Width / 2
Form5.ListView1.ColumnHeaders.Add , , "Size", Form5.ListView1.Width / 2


Do While Form5.ftp.GetFilename(contador) <> ""
   
    Set item = Form5.ListView1.ListItems.Add(, , Form5.ftp.GetFilename(contador), Form5.ImageList1.ListImages(6))   'aqui el imagelist deberia poner el icono en el list
   
    tamaño = Val(Form5.ftp.GetSize(contador)) / 1022
    item.SubItems(1) = Val(Mid(Str(tamaño), 1, 4)) & " " & "Kb"
   
    contador = contador + 1
   
Loop

End Function


a ver como consigo hacerlo porque no se me ocurre como :S
C# Programmer

-Estudiante MCTS .NET Framework 3.5-

ssccaann43 ©

Perdona pero así no es...

Debes indicarle al ListView que tiene enlazado un ImageList. Luego en el Codigo, indicas el Index del Icono. Los iconos cargalos en tiempo de Diseño.

Este es el Codigo que debe tener al momento de cargar la info en el ListView.
Código (vb) [Seleccionar]


Form5.ListView1.ListItems.Add(, , Form5.ftp.GetFilename(contador), 6)   
'El numero "6" identifica la posicion que tiene el icono dentro del ImageList.



Selecciona el ListView con click derecho y dale a propiedades.
Te vas a la pestaña de Lista de Imagenes. Y donde dice Normal o Pequeño, seleccionas el ImageList.
- Miguel Núñez
Todos tenemos derechos a ser estupidos, pero algunos abusan de ese privilegio...
"I like ^TiFa^"

SRVAM

gracias ssccaann43  ahora si que funciona.
ahora hay otro problemilla, y es que esta en el listview el item, pero no aparece el icono, en el margen izquierdo esta el hueco, pero no aparece el icono :S cuantos problemas me esta dando esta tonteria, perdon si me pongo pesado amigos.
C# Programmer

-Estudiante MCTS .NET Framework 3.5-