暂时隐藏组合框中的特定项目

时间:2012-10-04 07:24:36

标签: vb.net

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

2 个答案:

答案 0 :(得分:1)

刚看到你的问题,答案就会很长,因为如果没有删除它,就无法简单地让用户看到单个项目。但我可以为你的问题提出不同的解决方案。

我将采取以下假设:

  1. 您预先确定了城市的集合
  2. 用户在第二个组合框中选择一个城市和另一个城市
  3. 所以,我会尽可能简洁地尝试这样做。

    第一步:制作两个类型为'String Collection'的新设置,并将城市列表添加到两个

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

           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的新手,我尽量不做任何太复杂的事情,你无法自己调试。有更简洁有效的方法来做你想要的,但没有看到你的代码,只是觉得保持简单。如果您有任何其他问题,请与我们联系。

答案 1 :(得分:0)

您可以在Enabled事件中将SelectedIndexChanged条件设置为False。

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功能。

希望这有帮助。