提问人:9box 提问时间:5/14/2023 更新时间:5/14/2023 访问量:38
为什么我的列表框会抛出 NullReferenceException?
Why is my listbox throwing a NullReferenceException?
问:
作为一个项目,我一直在制作图书馆数据库的视觉部分。所需的屏幕之一是显示从 SQL 请求中提取的所有内容。这似乎很有效。但是,我遇到了一个奇怪的问题:我试图用数据库中的数据填充的 ListBox 似乎没有被识别。
这是我的代码:
Public Class Display
Dim coll As New Collection
Private Sub exiter_Click(sender As Object, e As EventArgs) Handles exiter.Click
Me.Close()
End Sub
Public Sub New(ByVal Collection As Collection)
coll = Collection
End Sub
Private Sub theBox_SelectedIndexChanged(sender As Object, e As EventArgs)
Dim book As Book
Dim correctBook As Book
For Each book In coll
If book.ISBN = theBox.SelectedValue Then
correctBook = book
End If
Next
Title.Text = book.BookTitle
Author.Text = book.Author
ISBN.Text = book.ISBN
Copyright.Text = book.Copyright
Copies.Text = book.Copies
End Sub
Private Sub Display_Load(sender As Object, e As EventArgs) Handles MyBase.Load
For index As Integer = 1 To coll.Count
theBox.Items.Add(coll(index).ISBN) 'error here
Next
End Sub
End Class
这是例外:
我知道这不是一个坏变量或其他东西的原因是,分配给的值是正确的,并且来自数据库:coll(index).ISBN
该错误发生在Display_Load上,因此我什至无法检查SelectedIndexChanged是否具有相同的错误,尽管我认为它确实如此。
这让我相信问题出在 ListBox 上。为了检查它是否刚刚损坏,我制作了一个单独的 Display.vb 版本,并更改了项目中的其余代码以使用它运行,但它仍然运行相同的错误。我在 theBox 上找不到任何奇怪的属性,唯一真正奇怪的是它作为 Nothing 发送。
我已经在 Google 上搜索了大约 3 个小时,其中包含各种错误和消息,我可以通过对它做不同的事情来显示它,但似乎没有人遇到这个特殊问题。如果我的代码有问题,那是什么问题?或者,如果自动生成的 ListBox 有问题,我该如何解决?谢谢!
答:
0赞
9box
5/14/2023
#1
弄清楚了问题,如果有人在以后发现这个问题
事实证明,放入 Public Sub New() 不是可选的,这实际上是初始化所有代码的原因。InitializeComponent()
我在上课之初就犯了这个错误,所以我没有发现它,直到我在一些不相关的问题中找到它。
为了将来参考,Public Sub New 的格式为
Public Sub New()
InitializeComponent()
(code here)
End Sub
评论
1赞
jmcilhinney
5/14/2023
作为记录,如果你不抗拒,VS 应该会自动为你添加该调用。如果您只是键入并按 Return,则 VS 会添加该调用和一条注释,指定它是必需的,以及另一个注释,告诉您在它之后放置任何其他初始化。如果包含参数列表,也会发生同样的事情。InitializeComponent
public sub new
评论
Collection
List(Of Book)
DisplayMember
ISBN
Text
Book
0
theBox
coll
New
New
Dim coll As New Collection
Dim coll As Collection = New Collection