我有一个选择列表:
{"Bubble Sort" , "Selection Sort" , "Quick Sort" , "Merge Sort"}
和两个组合框:Algorithm1
和Algorithm2
我做到了:
private List<string> AlgorithmList = new List<string>() {
"Bubble Sort", "Selection Sort" , "Merge Sort" , "Quick Sort"
};
Algorithm1.DataSource = AlgorithmList;
Algorithm2.DataSource = AlgorithmList;
我要执行以下操作:如果我选择Algorithm1
中可用的一种算法,那么它将在Algorithm2
中不再可用。
我以为如果我修改列表,它也会更改组合框,例如从列表中删除选择(如果已选中但没有用)。请告诉我一种方法,并告诉我即时通讯中的代码是什么:
combobox1.DataSource = List<object>;
答案 0 :(得分:0)
这很容易。 在DrawItem事件中使用BindingList类。 BindingList类是ComboBox的数据源。 DrawItem事件由两个参数组成。从DrawItemEventArgs的参数中获取索引并创建条件语句。
这里是一个例子:
BindingList _comboItems = new BindingList();
私有无效Combo_DrawItem(对象发送者,DrawItemEventArgs e)
{
Brush brush = null;
ComboBox combo = (ComboBox)sender;
if (TRUE)
{
//SELECT
e.Graphics.FillRectangle(SystemBrushes.Window, e.Bounds);
brush = ((e.State & DrawItemState.Selected) > 0) ? SystemBrushes.HotTrack : SystemBrushes.ControlText;
e.Graphics.DrawString(_comboItems[e.Index].Text, combo.Font, brush, e.Bounds);
}
else
{
e.DrawBackground();
e.Graphics.FillRectangle(Brushes.DarkGray, e.Bounds);
brush = ((e.State & DrawItemState.Selected) > 0) ? SystemBrushes.HighlightText : SystemBrushes.ControlText;
e.Graphics.DrawString(_comboItems[e.Index].Text, combo.Font, brush, e.Bounds);
e.DrawFocusRectangle();
}
}
答案 1 :(得分:0)
一种简单的方法,使用LINQ的.Where()
根据用户选择来过滤ComboBoxes
个项目列表。第二个ComboBox(ComboBox2
)的初始内容已预先过滤,以排除列表中的ComboBox1
第一个元素。
在Form.Load()
或类构造函数中:
ComboBox1.DataSource = AlgorithmList;
ComboBox2.DataSource = AlgorithmList
.Where(elm => elm != ComboBox1.GetItemText(ComboBox1.Items[0])).ToList();
在ComboBox1
中选择一项时,ComboBox2.DataSource
被过滤以排除所选项:
private void ComboBox1_SelectionChangeCommitted(object sender, EventArgs e)
{
ComboBox2.DataSource = AlgorithmList
.Where(elm => elm != ComboBox1.GetItemText(ComboBox1.SelectedItem)).ToList();
}