为什么我的列表框会抛出 NullReferenceException?

问题描述 投票:0回答:1

作为一个项目,我一直在制作图书馆数据库的可视化部分。所需的屏幕之一是显示从 SQL 请求中提取的所有内容。这似乎很有效。然而,我遇到了一个奇怪的问题:我试图用数据库中的数据填充的列表框似乎没有被识别。

这是我的代码:

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

这里是例外:

exception

我知道它不是坏变量的原因是因为分配给

coll(index).ISBN
的值是正确的并且来自数据库:

proof

错误发生在 Display_Load 上,所以我什至无法检查 SelectedIndexChanged 是否有相同的错误,尽管我认为它有。

这让我相信问题出在 ListBox 上。为了检查它是否刚刚损坏,我制作了一个单独版本的 Display.vb 并更改了项目中的其余代码以运行它,但它仍然运行相同的错误。我在 theBox 上没有找到任何奇怪的属性,唯一真正奇怪的是它作为 Nothing 发送。

我在谷歌上搜索了大约 3 个小时,其中包含各种错误和消息,我可以通过对它做不同的事情来让它显示出来,但似乎没有人遇到这个特殊问题。如果我的代码有问题,那是什么?或者,如果自动生成的 ListBox 有问题,我该如何解决?谢谢!

vb.net nullreferenceexception listboxitem
1个回答
0
投票

解决了这个问题,如果以后有人发现这个问题

事实证明,将

InitializeComponent()
放在 Public Sub New() 中不是可选的,这实际上是初始化所有代码的原因。

我在上课的一开始就犯了这个错误,所以直到我在一些不相关的问题中发现它才发现它。

供日后参考,Public Sub New 格式为

Public Sub New()
   InitializeComponent()
   (code here)
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.