1

私は .NET プログラミングの初心者です。コンボボックスでコーディングしようとしています。コンボボックスを2つ持っています。両方のコンボ ボックスの項目は同じです。都市の名前。私が探しているのは、ユーザーが最初のコンボ ボックスで 1 つの都市を選択すると、同じ都市が 2 番目のコンボ ボックスに表示されないようにすることです。「Remove」と「RemoveAt」を試しましたが、問題は、コレクションまたはコレクション内のアイテムのインデックスを変更したくないということです。これに加えて、ユーザーが後で別の都市を選択すると、最初の都市がリストに再び表示され、後の都市は消えます。これについて私を助けてください..事前に感謝します。

4

2 に答える 2

1

質問を見ただけで、答えはかなり長くなります。これは、1つのアイテムを削除せずに、ユーザーに表示されないようにする方法がないためです。しかし、私はあなたの質問に別の解決策を提案することができます。

私は次の仮定を外します:

  1. 都市のコレクションはあなたによって事前に決定されています
  2. ユーザーが1つの都市を選択し、2番目のコンボボックスで別の都市を選択すること

それで、私はこれをできるだけ簡潔にしようとします。

最初のステップ:「文字列コレクション」タイプの2つの新しい設定を作成し、両方に都市のリストを追加します

2番目のステップ:クラスの先頭に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 に答える