1

我是 .NET 编程的初学者。尝试使用组合框进行编码。我有两个组合框。两个组合框中的项目相同。城市名称。我正在寻找的是,当用户在第一个组合框中选择一个城市时,在第二个组合框中不应该看到同一个城市。我尝试了“Remove”和“RemoveAt”,但问题是,我不想更改集合中项目的集合或索引。除此之外,如果用户稍后选择另一个城市,第一个应该会再次出现在列表中,而后一个应该消失。请帮助我..提前谢谢你。

4

2 回答 2

1

刚刚看到你的问题,答案会很长,因为没有办法简单地让单个项目不出现在用户面前而不删除它。但我可以为您的问题提出不同的解决方案。

我将放弃以下假设:

  1. 城市集合由您预先确定
  2. 用户在第二个组合框中选择一个城市,然后选择另一个城市

所以,我会尽量简洁地做到这一点。

第一步:进行两个“字符串集合”类型的新设置,并将城市列表添加到它们中

第二步:在你的类的顶部创建两个新的字符串变量(你希望它们可以访问表单上的所有控件)

       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 回答