noitide (Normal User)
Pro
Messaggi: 107
Iscritto: 24/06/2009
|
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 |
For Each r As DataRow In tabellaproc1.Rows For Each p As Process In Process.GetProcesses If p.ProcessName = r.Item("processname") Then Dim lv As New ListViewItem lv.Text = p.ProcessName lv.Group = ListView1.Groups.Item(CInt(r.Item("processtype"))) If ListView1.Items.Contains(lv) = False Then ListView1.Items.Add(lv) MsgBox("Nuovo elemento") End If End If Next Next
|
Ultima modifica effettuata da noitide il 16/03/2011 alle 16:11 |
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
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.
|
|
noitide (Normal User)
Pro
Messaggi: 107
Iscritto: 24/06/2009
|
grazie mille totem dell'esauriente risposta.. ho risolto
|
|