使用列表IndexOf时未设置组合框SelectedIndex

时间:2018-12-25 17:35:13

标签: c# .net winforms data-binding combobox

我正在以编程方式创建一个组合框,如下所示:

var cbo = new ComboBox {
    DataSource = mylist,
    SelectedIndex = mylist.IndexOf(myvalue)
};

我没有设置ValueMember,所以该值将是对象本身。当我执行上述操作时,在SelectionIndex行上收到以下异常:

  

InvalidArgument =值'3'对于'SelectedIndex'无效。参数名称:SelectedIndex

是因为仍在创建组合框,因此DataSource仍未填充吗?如果是,设置索引的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

直到控件可见后,数据竞价才起作用。因此,您需要将代码更改为:

var mylist = Enumerable.Range(1, 5).ToList();
var myvalue = 2;
var cbo = new ComboBox();
cbo.HandleCreated += (obj, args) =>
{
    BeginInvoke(new Action(() =>
    {
        cbo.DataSource = mylist;
        cbo.SelectedIndex = mylist.IndexOf(myvalue);
    }));
};
this.Controls.Add(cbo);

然后,一旦控件可见,初始化代码将运行,ComboBox将由数据源项填充,并且其选定的索引将按预期设置。