我在windows应用程序中有2个组合框。我想以编程方式根据第一个组合框中选择的内容将项目添加到第二个组合框。
这是我在组合框的选定索引更改中所做的:
Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged
Try
If ComboBox1.SelectedIndex = 0 Then
ComboBox2.Items.Add("MM")
ComboBox2.Items.Add("PP")
ElseIf ComboBox1.SelectedIndex = 1 Then
ComboBox2.Items.Add("SMS")
ElseIf ComboBox1.SelectedIndex = 2 Then
ComboBox2.Items.Add("MMS")
ComboBox2.Items.Add("SSSS")
End If
Catch ex As Exception
End Try
End Sub
它工作正常,但是,如果我继续选择不同的项目,它会不断添加值。我想只添加一次这些值。
此外,当我添加项目时,我更愿意添加带有项目描述的ID。我试过了:
ComboBox2.Items.Add("SSSS", "1")
似乎它不起作用。
有什么建议吗?
答案 0 :(得分:2)
试试这个
Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles ComboBox1.SelectedIndexChanged
Try
If ComboBox1.SelectedIndex = 0 Then
If Not (ComboBox2.Items.Contains("MM")) And Not (ComboBox2.Items.Contains("PP")) Then
ComboBox2.Items.Add("MM")
ComboBox2.Items.Add("PP")
End If
ElseIf ComboBox1.SelectedIndex = 1 Then
If Not (ComboBox2.Items.Contains("SMS")) Then
ComboBox2.Items.Add("SMS")
End If
ElseIf ComboBox1.SelectedIndex = 2 Then
If Not (ComboBox2.Items.Contains("MMS")) And Not (ComboBox2.Items.Contains("SSSS")) Then
ComboBox2.Items.Add("MMS")
ComboBox2.Items.Add("SSSS")
End If
End If
Catch ex As Exception
End Try
答案 1 :(得分:0)
关于:
"此外,当我添加项目时,我更愿意为该项目添加ID 描述"
您可以使用ComboBox的AddRange
功能或制作我在此处显示的列表并将其用作数据源 - 如@Plutonix在其评论中所述。
使用它,您可以添加一个包含值和描述的类型的对象数组,前提是您覆盖ToString
基函数(Object
类)。
这是一个类:
Public Class CodeAndDescription
Public code As String
Public description As String
Public Overrides Function ToString() As String
Return Me.code + " - " + description
End Function
End Class
现在列出该上层类并将其添加到组合框中。类似的东西:
Dim lstItems As List(Of CodeAndDescription) = GetList()
yourComboBox.Items.Clear()
yourComboBox.Items.AddRange(lstItems.ToArray)
当你把它从组合中取出时,不要忘记将检索到的对象强制转换:
Dim codeDesc As CodeAndDescription = TryCast(yourComboBox.Items(0), CodeAndDescription)
我已在检查清单上完成此操作,但我认为ComboBox的原理相同。