vb.net - 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
解决方案
因为您正在使用 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
'
推荐阅读
- mysql - 无法从 Heroku(Spring Boot 应用程序)访问 MySQL:用户访问被拒绝(使用密码:是)
- ios - 创建一个只接受正整数 Swift 的函数
- rust - 使用 Rust 结构上实现的函数中的移动值
- php - 在这种情况下如何删除数组?
- angular - 对于依赖于彼此数据的请求,可观察对象是正确的解决方案吗?
- php - 如何合并集合关系数组并使其唯一?
- c++ - 为什么当我读取文件时 C++ stringstream 会跳过第一个字节
- c# - 模式匹配和识别模式类型
- reactjs - 反应中的过滤方法没有过滤出正确的结果
- arrays - 创建类、结构或新的 swift 文件以创建具有特定样式的可重用文本框?