ListView.Items.Find抛出错误;对象引用未设置为对象

时间:2017-04-20 18:53:00

标签: vb.net listview

这一直困扰着我几个小时。在我添加的每个新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

1 个答案:

答案 0 :(得分:0)

我不确定为什么会抛出异常,但您可以尝试使用IndexOfKey() method。它只会迭代,直到找到一个匹配而不是多个匹配。

If ListView2.Items.IndexOfKey(lv.Name) = -1 Then '-1 = no item found.