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