作为一个项目,我一直在制作图书馆数据库的可视化部分。所需的屏幕之一是显示从 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
这里是例外:
我知道它不是坏变量的原因是因为分配给
coll(index).ISBN
的值是正确的并且来自数据库:
错误发生在 Display_Load 上,所以我什至无法检查 SelectedIndexChanged 是否有相同的错误,尽管我认为它有。
这让我相信问题出在 ListBox 上。为了检查它是否刚刚损坏,我制作了一个单独版本的 Display.vb 并更改了项目中的其余代码以运行它,但它仍然运行相同的错误。我在 theBox 上没有找到任何奇怪的属性,唯一真正奇怪的是它作为 Nothing 发送。
我在谷歌上搜索了大约 3 个小时,其中包含各种错误和消息,我可以通过对它做不同的事情来让它显示出来,但似乎没有人遇到这个特殊问题。如果我的代码有问题,那是什么?或者,如果自动生成的 ListBox 有问题,我该如何解决?谢谢!
解决了这个问题,如果以后有人发现这个问题
事实证明,将
InitializeComponent()
放在 Public Sub New() 中不是可选的,这实际上是初始化所有代码的原因。
我在上课的一开始就犯了这个错误,所以直到我在一些不相关的问题中发现它才发现它。
供日后参考,Public Sub New 格式为
Public Sub New()
InitializeComponent()
(code here)
End Sub