Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - esistenza oggetto listview [VB.NET]
Forum - C# / VB.NET - esistenza oggetto listview [VB.NET]

Avatar
noitide (Normal User)
Pro


Messaggi: 107
Iscritto: 24/06/2009

Segnala al moderatore
Postato alle 16:09
Mercoledì, 16/03/2011
Questo topic è stato chiuso dal moderatore

Buon pomeriggio a tutti, ho un problema di questo tipo, non riesco a risolvere un problema alquanto elementare con una listview cioè verificare l'esistenza o meno dell'oggetto nella listview. Infatti quando arriva al Listview1.Items.Contains(lv) mi restituisce sempre il valore false anche se in realtà l'oggetto è già stato aggiunto all'insieme (anche perchè graficamente mi appare nella lista e quindi mi trovo ad avere 10 o 20 oggetti uguali nella lista).
cosa sbaglio? grazie mille :)


Codice sorgente - presumibilmente VB.NET

  1. For Each r As DataRow In tabellaproc1.Rows
  2.                 For Each p As Process In Process.GetProcesses
  3.                     If p.ProcessName = r.Item("processname") Then
  4.                         Dim lv As New ListViewItem
  5.                         lv.Text = p.ProcessName
  6.                         lv.Group = ListView1.Groups.Item(CInt(r.Item("processtype")))
  7.                         If ListView1.Items.Contains(lv) = False Then
  8.                                ListView1.Items.Add(lv)
  9.                                MsgBox("Nuovo elemento")
  10.                         End If
  11.                     End If
  12.                 Next
  13.             Next



Ultima modifica effettuata da noitide il 16/03/2011 alle 16:11
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 13:53
Giovedì, 17/03/2011
Sbagli perché non sai la differenza tra tipi valore e tipi riferimento.
http://totemslair.org/guide/viewchapter.php?guida=vb&id=6
ListViewItem è un tipo reference, e per testarne l'uguaglianza ListViewItemCollection utilizza i metodi ereditati da una collezione base generica. Questo significa che due elementi vengono testati con la funzione Equals, che, se non opportunamente riscritta con polimorfismo, restituisce true se e solo se i due oggetti comparati hanno lo stesso riferimento, ossia sono identici.
In questo caso, è evidente che l'oggetto contenuto nella lista e lv non sono identici, poiché uno viene creato ex novo nel ciclo, quindi non può condividere lo stesso riferimento con quello nella lista.

PM
Avatar
noitide (Normal User)
Pro


Messaggi: 107
Iscritto: 24/06/2009

Segnala al moderatore
Postato alle 18:16
Giovedì, 17/03/2011
grazie mille totem dell'esauriente risposta..:k: ho risolto :D

PM