我有一个从文本文件中读取的类,并将其添加到集合中。我正在试图弄清楚如何从集合中读取以在加载程序时填充组合框。
BillingData Class
Public ReadOnly Property Clients As Collection
Get
Return mClients
End Get
End Property
Sub New()
mClientFile = OpenText("clients.txt")
Dim mClients As New Collection
While Not mClientFile.EndOfStream
mClients.Add(mClientFile.ReadLine())
End While
mClientFile.Close()
的MainForm
Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
client = New BillingData()
Dim i As Integer
While i < client.Clients.Count
cbClient.Items.AddRange(client.Clients(i))
i = i + 1
End While
End Sub
答案 0 :(得分:2)
我对frmMain_Load
子例程进行了3次更改。
i
为1。<=
。使用Add
代替AddRange
。
Private Sub frmMain_Load(sender As Object, e As EventArgs) Handles MyBase.Load
client = New BillingData()
Dim i As Integer = 1
While i <= client.Clients.Count
cbClient.Items.Add(client.Clients(i))
i = i + 1
End While
End Sub
第一个更改(将i初始化为1)需要注意的一件有趣的事情:索引0处的客户端值为“基于1的数组的空占位符”。这基本上意味着集合从索引1开始。代码将抛出一个永远不会被捕获的幻像异常 - 这在VB.net表单加载例程中很常见。您可以通过在加载代码中设置断点来测试这一点,并确保它永远不会到达行i = i + 1
。如果您将代码放在按钮单击事件中,您将看到异常上的代码中断。故事的道德是要小心你在表单加载例程上放置的任何代码,因为如果代码中存在错误,你并不总能立即获得反馈。
答案 1 :(得分:1)
您可以尝试将您的收藏集添加到ComboBox的DataSource。如果您的问题是在将集合添加到ComboBox之前未初始化集合,则可以向数据准备好时引发的BillingData类添加事件。然后,您可以在事件处理程序中将该集合添加到ComboBox。
cbClient.DataSource = client.Clients