vb.net - 从字典中删除时的 Vb.net ArgumentNullException
问题描述
我遇到了一个问题,我试图从列表框中选定索引处的字典中删除一个元素。我向 a 添加了 3 个元素SortedDictionary
并将它们打印到列表框中。我正在尝试从列表框中突出显示的字典中删除该项目,但是当我单击删除时,我得到了System.ArgumentNullException: 'Value cannot be null. Parameter name: key'
我的 SubbtnDeleteLibrary_Click
为什么会这样?
线路发生错误Libraries.Remove(lstLibraries.SelectedValue)
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("Zahnow Library", "SVSU")
Libraries.Add("Fleschner Memorial Library", "BR")
Libraries.Add("Scott D. James Technical Repository", "SDJ")
lstLibraries.Items.Clear()
populatelstLibrary()
End Sub
Sub populatelstLibrary()
For Each library In Libraries
lstLibraries.Items.Add(vbCrLf & library.Key & " --- " & library.Value)
Next
End Sub
Private Sub btnDeleteLibrary_Click(sender As Object, e As EventArgs) Handles btnDeleteLibrary.Click
Libraries.Remove(lstLibraries.SelectedValue)
lstLibraries.Items.Clear()
populatelstLibrary()
End Sub
End Class
解决方案
由于您正在为 ListBox 项目构建自定义显示字符串,因此很难将其直接映射到字典。
最简单的解决方案是创建一个存储在 ListBox 中的自定义类,并设置 ListBox 的DisplayMember
和ValueMember
属性,告诉它如何显示每个项目以及在调用SelectedValue
.
班级:
Public Class LibraryItem
Public Property Name As String
Public Property Code As String
Public ReadOnly Property DisplayName As String
Get
Return vbCrLf & Me.Name & " --- " & Me.Code
End Get
End Property
Public Sub New()
End Sub
Public Sub New(ByVal Name As String, ByVal Code As String)
Me.Name = Name
Me.Code = Code
End Sub
End Class
最初设定:
Private Sub frmManager_Load(sender As Object, e As EventArgs) Handles Me.Load
'Tell the ListBox which properties to use for display and value.
lstLibraries.DisplayMember = "DisplayName"
lstLibraries.ValueMember = "Name"
'Your code...
End Sub
填充列表框:
Sub populatelstLibrary()
For Each library In Libraries
lstLibraries.Items.Add(New LibraryItem(library.Key, library.Value))
Next
End Sub
现在SelectedValue
将为您获取所选项目Name
属性的值,该值对应于字典中的键。
推荐阅读
- java - Java 中“if then else”语句的 hashmap 替代方案
- php - 合并计数主题,评论和最后评论日期论坛sql
- javascript - 使用 Hooks 更新 React Js 中的 JSX 内容
- linux-kernel - 对 Linux 内核使用 perf
- python - 为什么我的子弹不动,即使我的坦克
- templates - template_file 中的循环或选择运算符
- javascript - 避免元素在 React 表单中的浏览器调整大小时单独移动
- uicollectionview - 堆栈视图内部 UiscrollView 内容显示大于模拟器中的设备屏幕尺寸
- php - TextArea 作为一个字符串加入 PHP 如何在分隔符的帮助下将其他字符串设置为新行
- scala - Spark 可重复/确定性结果