Lo que quieres hacer no es complicado, en absoluto.
A continuación te explico lo que debes hacer para realizar este ejemplo que te propongo:
Inicia un nuevo proyecto EXE Estándar en Visual Basic y ve al menú Proyecto - Componentes.
Checkea el elemento: Microsoft Window Common Controls 5.0
Ahora, en el formulario, inserta un control ImageList y un ListView.
Da al ListView el nombre: LV
Da al ImageList el nombre: imgList
Haz click con el botón derecho encima de imgList y selecciona Propiedades en el popup menú aparecido.
En la pestaña General selecciona el tamaño 16 x 16 y en Imágenes selecciona 6 imágenes de tu disco duro distintas.
En el evento Load del formulario, escribe:
'---------------------------------
'código
'---------------------------------
Private Sub Form_Load()
Dim List As ListItem
LV.ColumnHeaders.Add , , "Elementos" 'Se crea un encabezado de columna en el ListView
LV.SmallIcons = imgList 'Se asigna imgList como control ImageList que contiene los iconos pequeños
LV.View = lvwReport 'Se selecciona vista de iconos pequeños
For i = 1 To 6
Set List = LV.ListItems.Add(i)
List.Text = "Elemento nº " & i 'Se añade el texto del elemento actual
List.SmallIcon = i 'Se asigna el icono pequeño del elemento actual mediante el índice correspondiente en en ImageList
Next i
End Sub
'---------------------------------
'código
'---------------------------------
Este código rellena el ListView con 6 elementos y les adjudica un icono pequeño distinto a cada uno de ellos.
Si tu propósito no era mostrar el ListView con iconos pequeños, es decir, no querías el ListView con propiedad View en lvwReport (para mostrar los elementos en detalle y con iconos pequeños) o, si en alguna parte del código, deseas cambiar de vista de iconos (de pequeños a grandes o viceversa) puedes modificar el código de esta manera, para que, además de asignar iconos pequeños, asigne iconos grandes:
'---------------------------------
'código
'---------------------------------
Private Sub Form_Load()
Dim List As ListItem
LV.ColumnHeaders.Add , , "Elementos" 'Se crea un encabezado de columna en el ListView
LV.SmallIcons = imgList 'Se asigna imgList como control ImageList que contiene los iconos pequeños
LV.Icons = imgList 'Se asigna imgList como control ImageList que contiene los iconos grandes
LV.View = lvwReport 'Se selecciona vista de iconos pequeños
For i = 1 To 6
Set List = LV.ListItems.Add(i)
List.Text = "Elemento nº " & i 'Se añade el texto del elemento actual
List.SmallIcon = i 'Se asigna el icono pequeño del elemento actual mediante el índice correspondiente en en ImageList
List.Icon = i 'Se asigna el icono del elemento actual mediante el índice correspondiente en en ImageList
Next i
End Sub
'---------------------------------
'código
'---------------------------------
Este nuevo código, además de establecer las imágenes del imgList como iconos pequeños de los elementos, también los establece como iconos grandes, de manera que si se cambia la propiedad View del ListView a lvwIcon se muestran iconos grandes y, si se cambia a lvwReport, se muestran iconos pequeños.
Como has visto, para adjudicar una imagen de un control ImageList a un elemento de un ListView, basta con asignar a la propiedad Icon (o SmallIcon, en caso de iconos pequeños) el índice de la imagen correspondiente en el ImageList o, opcionalmente, el Key.
Este último, en según que casos, puede resultar más entendedor, puesto que se le puede dar a cada imagen del ImageList un Key de acuerdo con su apariencia (por ejemplo, si la imagen es un archivo, le podemos dar el Key "file" o si se trata de una carpeta, el Key "folder" o "carpeta", como queramos, pero, sin duda, siempre resulta más intuitivo que asignarle un número (Index).
Espero que mi explicación haya sido entendedora y perdón si me he alargado un poco... pero es que me resulta inevitable...
Si lo deseas, puedo enviarte un código fuente para mayor comprensión.
Hasta otra,
Zoto