如何从使用相同选项列表的两个组合框中选择两个不同的选项

时间:2018-09-27 05:33:28

标签: c# winforms

我有一个选择列表:
{"Bubble Sort" , "Selection Sort" , "Quick Sort" , "Merge Sort"}

和两个组合框:Algorithm1Algorithm2

我做到了:

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>;

2 个答案:

答案 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();
}