我试图将多个项目添加到组合框中,但只显示最后一个项目。
示例:
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将会丢失。
为什么?
答案 0 :(得分:1)
你这太复杂了。 在列表中填充所需的值。 然后将DataSource属性设置为ONCE。在上面的代码中,您将在循环的每次迭代中设置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
答案 1 :(得分:0)
在我看来,每次调用AddItemToComboBoxMod()时都会创建一个新的Dictionary。您可能希望将其实例化并将其绑定到其他位置。添加项方法只应附加键值对。