私は .NET プログラミングの初心者です。コンボボックスでコーディングしようとしています。コンボボックスを2つ持っています。両方のコンボ ボックスの項目は同じです。都市の名前。私が探しているのは、ユーザーが最初のコンボ ボックスで 1 つの都市を選択すると、同じ都市が 2 番目のコンボ ボックスに表示されないようにすることです。「Remove」と「RemoveAt」を試しましたが、問題は、コレクションまたはコレクション内のアイテムのインデックスを変更したくないということです。これに加えて、ユーザーが後で別の都市を選択すると、最初の都市がリストに再び表示され、後の都市は消えます。これについて私を助けてください..事前に感謝します。
質問する
7286 次
2 に答える
1
質問を見ただけで、答えはかなり長くなります。これは、1つのアイテムを削除せずに、ユーザーに表示されないようにする方法がないためです。しかし、私はあなたの質問に別の解決策を提案することができます。
私は次の仮定を外します:
- 都市のコレクションはあなたによって事前に決定されています
- ユーザーが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 に答える