这一直困扰着我几个小时。在我添加的每个新ListViewItem
上,我将一个Name值与它关联,因此它不会两次添加相同的项目。该值是一个URL,我不确定这可能是问题吗?
我得到的错误是:
对象引用未设置为对象的实例。
完整的错误说明:
System.NullReferenceException:对象引用未设置为对象的实例。 通过System.Windows.Forms.ListView.ListViewItemCollection.FindInternal(String key,Boolean searchAllSubItems,ListViewItemCollection listViewItems,ArrayList foundItems) 在System.Windows.Forms.ListView.ListViewItemCollection.Find(String key,Boolean searchAllSubItems)
这是我的代码:
我在If Not ListView2.Items.Find(lv.Name, False).Count >= 1 Then
Dim m_url As String = HttpUtility.HtmlDecode(matchUrl)
m_url = m_url.Replace(" ", "")
If Not m_url.Contains(rootdomain) Then
Dim lv As New ListViewItem
lv.Name = m_url
If Not ListView2.Items.Find(lv.Name, False).Count >= 1 Then
lv.Text = m_url
lv.SubItems.Add(StripTags(match.Groups(2).Value))
lv.SubItems.Add("")
ListView2.Items.Add(lv)
End If
e_links_c += 1
End If
我试图完全没有使用这个名字,但后来我发现了一些错误,这些错误表明已经添加了密钥,我不知道为什么会发生这种情况,因为我没有将任何名称值与项目相关联。
更新的代码:
Dim lv As New ListViewItem(m_url)
lv.Name = m_url
If ListView2.Items.IndexOfKey(lv.Name) = -1 Then
lv.SubItems.Add(StripTags(match.Groups(2).Value))
lv.SubItems.Add("")
ListView2.Items.Add(lv)
End If
答案 0 :(得分:0)
我不确定为什么会抛出异常,但您可以尝试使用IndexOfKey()
method。它只会迭代,直到找到一个匹配而不是多个匹配。
If ListView2.Items.IndexOfKey(lv.Name) = -1 Then '-1 = no item found.