2013-02-07 140 views
1

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

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

的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

这里有问题吗? –

回答

1

你可以尝试加入您的收藏组合框的DataSource。如果你的问题是你的Collection没有被初始化,然后你将它添加到ComboBox中,你可以添加一个事件到你的BillingData类中,当数据准备好时引发。然后,您可以将该集合添加到Event Handler中的ComboBox中。

cbClient.DataSource = client.Clients 
2

我做了3名更改frmMain_Load子程序。

  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的值是“对于基于1的阵列空占位符”。这基本上意味着集合从索引1开始。代码会抛出一个永远不会被捕获的幻影异常 - 这在VB.net表单加载例程中很典型。你可以通过在你的加载代码中设置一个断点来测试它,并且看到它永远不会到达线i = i + 1。如果您将代码放入按钮单击事件中,您会看到代码中断了异常。故事的道德是要小心你在表单加载例程上的任何代码,因为如果代码中存在错误,你并不总是得到及时的反馈。

相关问题