Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. 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.


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
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