字典使所有键的值等于最近的键/值添加
Posted
技术标签:
【中文标题】字典使所有键的值等于最近的键/值添加【英文标题】:Dictionary makes value for all keys equal to most recent key/value addition 【发布时间】:2012-07-10 17:43:38 【问题描述】:我正在尝试将一些项目添加到字典对象(数据库 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
即用户单击按钮,first 认为发生的情况是上面的块,以确认旧键具有其原始值,但它们没有。它们已经被“新值”所取代。之后运行该块可以确认这一点。
为什么会这样?
【问题讨论】:
【参考方案1】:问题是您没有添加 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
【讨论】:
啊,这很有道理!唯一的问题是使用txtPercentOfStream.Text
会出现此错误“除非控件具有焦点,否则您无法引用控件的属性或方法。”所以我做了一个Dim PercentOfStream As Integer
然后PercentOfStream = txtPercentOfStream
并将PercentOfStream
添加到我的字典中。
另一种方法是调用txtPercentOfStream.Value
。 .Text
属性使用起来令人沮丧,调用它几乎是不可能的。
抱歉现在才看到这些cmets,很高兴你解决了你的问题,我会用你的cmets更新我的答案
谢谢,看起来不错。我又做了一个更正:最初的 if
将整数与字符串进行比较,我将条件更改为查看文本框,然后将文本框分配给整数 PercentOfStream
以上是关于字典使所有键的值等于最近的键/值添加的主要内容,如果未能解决你的问题,请参考以下文章
给定一个字符串列表,如果任何值等于列表中的值,我想将字典的值添加到新字典中[重复]