将多个项目添加到组合框只会添加最后一个项目
Adding multiple items to combo box only adds LAST ITEM
我正在尝试向组合框中添加多个项目,但只显示最后一个项目。
示例:
Dim i as Integer
For i = 0 to 3
AddItemToComboBox(i, i)
Next
Sub AddItemToComboBoxMod(ByVal itmValue, ByVal itmData)
Dim comboSource As New Dictionary(Of String, String)()
comboSource.Add(itmValue, itmData)
cbComboBox.DataSource = New BindingSource(comboSource, Nothing)
cbComboBox.DisplayMember = "Value"
cbComboBox.ValueMember = "Key"
Dim key As String = DirectCast(cbComboBox.SelectedItem, KeyValuePair(Of String, String)).Key
Dim value As String = DirectCast(cbComboBox.SelectedItem, KeyValuePair(Of String, String)).Value
End Sub
但最后,只有最后一项“3”会出现。 0,1,2 将丢失。
为什么?
在我看来,您每次调用 AddItemToComboBoxMod() 时都在创建一个新词典。您可能想要实例化它并将其绑定到其他地方。添加项方法应该只附加键值对。
你把事情搞得太复杂了。
在列表中填充所需的值。
然后设置数据源 属性 一次。在上面的代码中,您在循环的每次迭代中设置 DataSource 属性。
下面是我用来演示概念的示例事件处理程序。
Private Sub cmdPopulate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPopulate.Click
Dim i As Integer
Dim comboSource As New Dictionary(Of String, String)()
For i = 0 To 3
comboSource.Add(i, i)
Next
cbComboBox.DataSource = New BindingSource(comboSource, Nothing)
cbComboBox.DisplayMember = "Value"
cbComboBox.ValueMember = "Key"
End Sub
我正在尝试向组合框中添加多个项目,但只显示最后一个项目。
示例:
Dim i as Integer
For i = 0 to 3
AddItemToComboBox(i, i)
Next
Sub AddItemToComboBoxMod(ByVal itmValue, ByVal itmData)
Dim comboSource As New Dictionary(Of String, String)()
comboSource.Add(itmValue, itmData)
cbComboBox.DataSource = New BindingSource(comboSource, Nothing)
cbComboBox.DisplayMember = "Value"
cbComboBox.ValueMember = "Key"
Dim key As String = DirectCast(cbComboBox.SelectedItem, KeyValuePair(Of String, String)).Key
Dim value As String = DirectCast(cbComboBox.SelectedItem, KeyValuePair(Of String, String)).Value
End Sub
但最后,只有最后一项“3”会出现。 0,1,2 将丢失。
为什么?
在我看来,您每次调用 AddItemToComboBoxMod() 时都在创建一个新词典。您可能想要实例化它并将其绑定到其他地方。添加项方法应该只附加键值对。
你把事情搞得太复杂了。 在列表中填充所需的值。 然后设置数据源 属性 一次。在上面的代码中,您在循环的每次迭代中设置 DataSource 属性。
下面是我用来演示概念的示例事件处理程序。
Private Sub cmdPopulate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdPopulate.Click
Dim i As Integer
Dim comboSource As New Dictionary(Of String, String)()
For i = 0 To 3
comboSource.Add(i, i)
Next
cbComboBox.DataSource = New BindingSource(comboSource, Nothing)
cbComboBox.DisplayMember = "Value"
cbComboBox.ValueMember = "Key"
End Sub