3

ディクショナリ オブジェクト (データベース ID と値のペア) にいくつかの項目を追加して、ユーザーがコミットする前に選択内容を確認できるようにしようとしています。ディクショナリに項目を追加する次のコード セクションがあります。追加後、Dictionary.Keys をループし、各キー/値をリストボックスに出力してユーザーに表示します。私のディクショナリ オブジェクトはフォームのパブリック変数であり、Form_Load イベントで設定されます。

Dim PickListID As Integer
If txtPercentOfStream <> "" Then
    PickListID = cboCoalTypes
    If Not CoalsInStreamDic.Exists(PickListID) Then
        CoalsInStreamDic.Add PickListID, txtPercentOfStream
    End If
Else
    Exit Sub
End If

奇妙なことに、新しいキーと値のペアを追加するたびに、新しいキーの値が、新しいキーに加えて既存のすべてのキーの値になります。

辞書を操作する前後にこの小さなブロックを実行します

Dim key As Variant
For Each key In CoalsInStreamDic.Keys
    Debug.Print key & "::" & CoalsInStreamDic.item(key)
Next key
Debug.Print

つまり、ユーザーがボタンをクリックすると、古いキーが元の値を持っていることを確認するために、この上記のブロックが最初に発生すると考えられますが、そうではありません。それらはすでに「新しい値」に置き換えられています。後でブロックを実行すると、これが確認されます。

なぜこうなった?

4

1 に答える 1

3

問題は、TextBox のテキストを追加するのではなく、代わりに TextBox を追加することです。

コードを次のように変更すると、動作するはずです

If txtPercentOfStream <> "" Then
    Dim PickListID As Integer, PercentOfStream As Integer
    PercentOfStream = txtPercentOfStream
    PickListID = cboCoalTypes
    If Not CoalsInStreamDic.Exists(PickListID) Then
        CoalsInStreamDic.Add PickListID, PercentOfStream
    End If
Else
    Exit Sub
End If
于 2012-07-10T17:53:08.430 に答える