Newsgroup: it.comp.lang.visual-basic
Titolo: Problema con listitem

devo spostare un item di una listview un posto sopra a quello attuale.
Faccio così:
   Set temp_item = lv.SelectedItem
   With temp_item
   If .Index <> 1 Then
      lv.ListItems.Remove (.Index)
      Set item = lv.ListItems.Add(.Index - 1, .Key, .Text, , 1)
      For i = 1 To lv.SelectedItem.ListSubItems.Count
          item.SubItems(i) = .SubItems(i)
      Next i
      item.Selected = True
   End If
ma mi dà errore perchè quando cancello il listitem, anche temp_item si 
cancella, come se temp_item fosse solo un puntatore a selecteditem e non 
una effettiva copia di questo. come devo fare? Grazie

 una effettiva copia di questo.
non "come se": č proprio cosě!
Per risolvere il tuo problema, crea un item due posti piů sů, copiaci l'item
corrente e poi cancella l'originale.
With lv.SelectedItem
  y = .Index
  If .Index < lv.ListItems.Count Then
    Set Item = lv.ListItems.Add(y + 2, .Key, .Text)
    For i = 1 To lv.SelectedItem.ListSubItems.Count
        Item.SubItems(i) = .SubItems(i)
    Next i
    lv.ListItems.Remove y
    lv.ListItems.Item(y + 1).Selected = True
    lv.SetFocus
  End If
End With
--
Ciao, Silv:o)

 corrente e poi cancella l'originale.
Non e' necessario, si puo' fare anche senza copia, basta salvare in anticipo
l'indice dell'elemento (prima della rimozione) e fare attenzione ad alcune
property che non permangono (per es. SubItems va perso, ma la collection
ListSubItems no)
Quindi:
Dim temp_item As ListItem, Item As ListItem
Dim temp_index As Long, i As Long
If lv.SelectedItem.Index > 1 Then
    Set temp_item = lv.SelectedItem
    'dopo la rimozione ci riferiamo sempre a questo e NON alla property
    temp_index = temp_item.Index
    lv.ListItems.Remove temp_index
    With temp_item
       Set Item = lv.ListItems.Add(temp_index - 1, .Key, .Text, ,
.SmallIcon)
       For i = 1 To .ListSubItems.Count
           Item.ListSubItems.Add , , .ListSubItems(i).Text
       Next i
    End With
    Set lv.SelectedItem = Item
End If
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmet L. Brown

 ListSubItems no)
Sì, ma allora devi salvare anche le proprietà Key, Text e SmallIcon. Infatti
se cancelli l'elemento di indice temp_index (cioè temp_item) allora non ha
più senso
With temp_item
Propenderei anche io per la prima soluzione proposta, quella di Silvio, se
non fosse per la Key.. dovresti memorizzare la Key del temp_item, scriverlo
due posti sopra come ti è stato suggerito con una Key temporanea, eliminare
temp_item e modificare la Key dell'ultimo elemento inserito.
Così penso che dovrebbe funzionare.
--
Raynor
www.freestyler.it

 With temp_item
No, non e' necessario, l'istanza mantenuta in temp_item conserva ancora la
maggior parte dei valori (alcuni "topici" tipo Index evidentemente hanno
senso solo nel contesto della lista i cui e' contenuto, ma gli altri no e
permangono)
Prova la routine che ho postato, un meccanismo simile lo usiamo regolarmente
nei nostri programmi e funziona perfettamente...


, 
lucaFaV...@tin.it
 says...

SSSSSSShhhhhhhh!!! Avevo notato che alcune proprietà si conservavano!!!
Grazie Luca. Avevo optato per un salvataggio dei subitems in una 
matrice, ma la tua soluzione mi sembra più elegante.