首页 > 解决方案 > VB.Net 从列表框中的 SelectedValue 中删除字典中的数据

问题描述

我无法从字典中删除数据。Delete Library我希望在单击按钮时从字典中删除列表框中突出显示的任何数据。删除后,它将使用更新的字典重新填充列表。

Public Class frmManager

    Dim Libraries As New SortedDictionary(Of String, String)

    Private Sub frmManager_Load(sender As Object, e As EventArgs) Handles Me.Load

        Libraries.Add("SVSU", "Zahnow Library")
        Libraries.Add("BR", "Fleschner Memorial Library")
        Libraries.Add("SDJ", "Scott D. James Technical Repository")

        populatelstLibrary()

    End Sub

    Sub populatelstLibrary()

        For Each library In Libraries
            lstLibraries.Items.Add(vbCrLf & library.Value & " --- " & library.Key)
        Next

     End Sub

    Private Sub btnDeleteLibrary_Click(sender As Object, e As EventArgs) Handles btnDeleteLibrary.Click

        Dim key As String = ""

        If lstLibraries.SelectedValue IsNot Nothing Then

            For Each library In Libraries
                key = library.Key
                If lstLibraries.SelectedValue.Equals(key) Then
                    Libraries.Remove(key)
                End If
            Next

            lstLibraries.Items.Clear()
            populatelstLibrary()

        End If

    End Sub

End Class

标签: vb.netdictionary

解决方案


因为您正在使用 BOTH 键和​​值以及字符串“---”填充列表框,因此列表框的内容永远不会匹配 KEY 或 VALUE,但它会同时匹配 BOTH 并且仅使用相同的字符串“---” .

因此,当您测试相等性时,请测试您用于加载列表的相同相等性。

下面的代码可以工作,但可能可以进一步简化。重要的不是它有效,而是它有效并且你明白你哪里出错了,以及为什么。

'
Dim key As String = ""
Dim tmpLibraries As New SortedDictionary(Of String, String)

If lstLibraries.SelectedIndex > -1 Then

  For Each Item In Libraries
    If lstLibraries.SelectedItem.Equals(Item.Value & " --- " & Item.Key) Then
      'this will be dropped
    Else
      tmpLibraries.Add(Item.Value, Item.Key)
    End If
  Next

  lstLibraries.Items.Clear()
  Libraries = tmpLibraries
  tmpLibraries = Nothing
  PopulatelstLibraries()

End If
'

推荐阅读