如何validationc#中的combobox值

在此处输入图像描述 我有6个c#表单的combobox,它们都来自同一列的数据库。 即为了使学生结果combobox填写主题名称。 现在我想要的是如果在上一个combobox中已经选择了主题,如何从第二个combobox中删除主题名称。我使用combobox属性来填充数据库中的每个combobox。

Firsty你可以创建一个List并为每个ComboBox以这种方式添加项和SelectedValueChanged事件处理程序:

 List comboBoxes = new List(); //here add your comboboxes to the list using the Add() method foreach(ComboBox cb in comboboxes){ cb.SelectedValueChanged += new EventHandler(comboBox_SelectedValueChanged); //add items to the ComboBox } 

然后,当触发SelectedValueChanged事件时,使用SelectedItem属性和Items.Remove()方法从其他ComboBox中删除所选项目:

 private void comboBox_SelectedValueChanged(object sender, EventArgs e){ //Fill the comboboxes ComboBox comboBox = (ComboBox)sender; if(comboBox.SelectedItem != null){ foreach(ComboBox cb in comboboxes) cb.Items.Remove(comboBox.SelectedItem); } } 

PS:如果用户从ComboBox中选择多个元素,因为它将从其他ComboBox中删除它们,这也不起作用。 所以这只是一个例子,它为您提供了如何开发它的一些建议。 总而言之,你必须改进它。


编辑:因为你可能有一些问题来解决这个问题,我为你改进了它:

 private void comboBox_SelectedValueChanged(object sender, EventArgs e){ foreach(ComboBox cb in comboBoxes){ //Here listItems is a list of elements you added firstly to the comboboxes if(cb.Items.Count < listItems.Count) foreach(object item in listItems){ if(!cb.Items.Contains(item)) cb.Items.Add(item); } } } //Remove the selected items in all the comboboxes ComboBox comboBox = (ComboBox)sender; if(comboBox.SelectedItem != null){ for(int i = 0; i < comboBoxes.Count; i++){ for(int j = 0; j < comboBoxes.Count; j++){ if(i != j && comboBoxes[j].SelectedItem != null && comboBoxes[j].Contains(comboBoxes[j].SelectedItem)) comboBoxes[i].Items.Remove(comboBoxes[j].SelectedItem); } } } } 

如果你有太多的ComboBox,这可能会非常慢,所以我尽量让它更快。 但在这种情况下,你有6个ComboBox控件,它应该工作得很好。

您需要有一个选定的项目列表,然后在事件selectedValueChanged()之后,您必须删除旧的combobox值并再次填充每个combobox。

  List coll = new List(); List dbItems = new List(); private void FillComboBox(object currSelected, ComboBox control) { control.Items.Clear(); foreach (object c in dbItems) { if ((coll.Contains(c) == false) || (c == currSelected)) { control.Items.Add(c); } } control.SelectedItem = currSelected; } private void SelectedItemChanged() { foreach (object c in coll) { if ((comboBox1.SelectedItem != null && c.Equals(comboBox1.SelectedItem)) || (comboBox2.SelectedItem != null && c.Equals(comboBox2.SelectedItem)) || (comboBox3.SelectedItem != null && c.Equals(comboBox3.SelectedItem))) { }else{ coll.Remove(c); } } } private void comboBox1_SelectedValueChanged(object sender, EventArgs e) { // That code must be in every combobox_selectedValueChanged SelectedItemChanged(); FillComboBox(coll, comboBox1); FillComboBox(coll, comboBox2); FillComboBox(coll, comboBox3); } 

PS:对不起,但我不记得如何在combobox中获得以前选择的项目,所以当任何combobox选择的项目被更改时,我写了另外的方法。