1

我有一个从文本文件中读取的类,并将其添加到集合中。我试图弄清楚如何在加载程序时从集合中读取以填充组合框。

计费数据类

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()

主窗体

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
4

2 回答 2

2

frmMain_Load我对子程序进行了 3 处更改。

  1. 将计数器初始化i为 1。
  2. 将 while 循环条件更改为<=.
  3. 用来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 处的 Clients 的值是“基于 1 的数组的空占位符”。这基本上意味着集合从索引 1 开始。代码会抛出一个永远不会被捕获的幻像异常——这在 VB.net 表单加载例程中很典型。您可以通过在加载代码中设置断点来测试它,并查看它永远不会到达该行i = i + 1。如果您将代码放在按钮单击事件中,您会看到异常中的代码中断。这个故事的寓意是要小心你放在表单加载例程上的任何代码,因为如果代码中有错误,你并不总是能立即得到反馈。

于 2013-02-07T03:08:05.923 回答
1

您可以尝试将您的 Collection 添加到 ComboBox 的DataSource中。如果您的问题是您的 Collection 在添加到 ComboBox 之前未初始化,您可以向您的 BillingData 类添加一个事件,该事件在数据准备好时引发。然后,您可以将集合添加到事件处理程序中的 ComboBox。

cbClient.DataSource = client.Clients
于 2013-02-07T01:51:20.593 回答