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

メインフォーム

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に追加してみてください。コレクションを ComboBox に追加する前にコレクションが初期化されていないという問題がある場合は、データの準備ができたときに発生する BillingData クラスにイベントを追加できます。その後、イベント ハンドラーの ComboBox にコレクションを追加できます。

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