将集合中的项添加到组合框中

时间:2013-02-07 01:41:44

标签: vb.net class collections combobox

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

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

2 个答案:

答案 0 :(得分: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
    
  4. 第一个更改(将i初始化为1)需要注意的一件有趣的事情:索引0处的客户端值为“基于1的数组的空占位符”。这基本上意味着集合从索引1开始。代码将抛出一个永远不会被捕获的幻像异常 - 这在VB.net表单加载例程中很常见。您可以通过在加载代码中设置断点来测试这一点,并确保它永远不会到达行i = i + 1。如果您将代码放在按钮单击事件中,您将看到异常上的代码中断。故事的道德是要小心你在表单加载例程上放置的任何代码,因为如果代码中存在错误,你并不总能立即获得反馈。

答案 1 :(得分:1)

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

cbClient.DataSource = client.Clients