Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: SRVAM en 24 Agosto 2009, 15:46 PM

Título: problema con imagelist y listview
Publicado por: SRVAM en 24 Agosto 2009, 15:46 PM
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
Título: Re: problema con imgalist y listview
Publicado por: yovaninu en 24 Agosto 2009, 17:09 PM
quiza te sirva este codigo
http://foro.elhacker.net/programacion_vb/como_poner_icono_a_un_listview1-t255963.0.html;msg1241543#msg1241543
Título: Re: problema con imagelist y listview
Publicado por: SRVAM en 26 Agosto 2009, 02:38 AM
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
Título: Re: problema con imagelist y listview
Publicado por: MCKSys Argentina en 26 Agosto 2009, 03:24 AM
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!


Título: Re: problema con imagelist y listview
Publicado por: seba123neo en 26 Agosto 2009, 03:28 AM
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.
Título: Re: problema con imagelist y listview
Publicado por: SRVAM en 26 Agosto 2009, 15:18 PM
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
Título: Re: problema con imagelist y listview
Publicado por: ssccaann43 © en 26 Agosto 2009, 16:33 PM
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.
Título: Re: problema con imagelist y listview
Publicado por: SRVAM en 27 Agosto 2009, 00:48 AM
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.