我是 .NET 编程的初学者。尝试使用组合框进行编码。我有两个组合框。两个组合框中的项目相同。城市名称。我正在寻找的是,当用户在第一个组合框中选择一个城市时,在第二个组合框中不应该看到同一个城市。我尝试了“Remove”和“RemoveAt”,但问题是,我不想更改集合中项目的集合或索引。除此之外,如果用户稍后选择另一个城市,第一个应该会再次出现在列表中,而后一个应该消失。请帮助我..提前谢谢你。
问问题
7286 次
2 回答
1
刚刚看到你的问题,答案会很长,因为没有办法简单地让单个项目不出现在用户面前而不删除它。但我可以为您的问题提出不同的解决方案。
我将放弃以下假设:
- 城市集合由您预先确定
- 用户在第二个组合框中选择一个城市,然后选择另一个城市
所以,我会尽量简洁地做到这一点。
第一步:进行两个“字符串集合”类型的新设置,并将城市列表添加到它们中
第二步:在你的类的顶部创建两个新的字符串变量(你希望它们可以访问表单上的所有控件)
Private Sub ComboBox1_Leave(sender as Object, e as EventArgs) Handles ComboBox1.Leave
If ComboBox1.SelectedIndex = -1 Then
myStringOne = vbNullString ' Nothing is chosen
Else
myStringOne = ComboBox1.SelectedItem.ToString 'One of the two variables as described in the second step
End If
If Not myStringOne = vbNullString Then
ComboBox2.Items.Remove(myStringOne) ' Remove it just for now
End If
End Sub
Private Sub ComboBox1_Enter(sender as Object, e as EventArgs) Handles ComboBox1.Enter
If myStringTwo = vbNullString Then
ComboBox1.Clear ' Clear list
For Each city in My.Settings.CitiesListOne
ComboBox1.Items.Add(city)
Next
Else 'User selected a city in ComboBox2
ComboBox1.Remove(myStringTwo)
End If
End Sub
Private Sub ComboBox2_Leave(sender as Object, e as EventArgs) Handles ComboBox1.Leave
If ComboBox2.SelectedIndex = -1 Then ' Nothing is chosen
myStringOne = vbNullString
Else
myStringTwo = ComboBox2.SelectedItem.ToString 'One of the two variables as described in the second step
If Not myStringTwo = vbNullString Then
ComboBox1.Items.Remove(myStringTwo) ' Remove it just for now
End If
End Sub
Private Sub ComboBox2_Enter(sender as Object, e as EventArgs) Handles ComboBox1.Enter
If myStringOne = vbNullString Then
ComboBox2.Clear ' Clear list
For Each city in My.Settings.CitiesListTwo
ComboBox2.Items.Add(city)
Next
Else 'User selected a city in ComboBox1
ComboBox2.Remove(myStringOne)
End If
End Sub
正如您所说,您是 VB.NET 的新手,我尽量不做任何您无法自行调试的太复杂的事情。有更简洁有效的方法来做你想做的事,但没有看到你的代码,只是觉得保持简单。如果您还有其他问题,请告诉我。
于 2012-11-09T08:10:10.020 回答
0
您可以在您的活动中将Enabled
条件设置为 False 。SelectedIndexChanged
Private Sub ComboBox1_SelectedIndexChanged(sender as Object, e as EventArgs) Handles ComboBox1_SelectedIndexChanged
Dim x as integer
x = ComboBox1.SelectedValue
For i as integer = 1 to ComboBox2.Items.Count -1
ComboBox2.Items(i).Enabled = True
Next
ComboBox2.Items(x).Enabled = False
End Sub
您需要启用该autopostback
功能。
希望这可以帮助。
于 2016-04-15T23:08:40.673 回答