【问题标题】:Add items from a collection to a combo box将集合中的项目添加到组合框
【发布时间】:2013-02-07 01:41:44
【问题描述】:

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

BillingData 类

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

【问题讨论】:

  • 这里有问题吗?

标签: vb.net class collections combobox


【解决方案1】:

我对@9​​87654321@ 子例程进行了 3 处更改。

  1. 将计数器 i 初始化为 1。
  2. 将 while 循环条件更改为 &lt;=
  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 行。如果您将代码放在按钮单击事件中,您会看到异常中的代码中断。这个故事的寓意是要小心你在表单加载例程中放置的任何代码,因为如果代码中有错误,你并不总是能立即得到反馈。

【讨论】:

    【解决方案2】:

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

    cbClient.DataSource = client.Clients
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多