C# 组合框SelectedIndex在使用list IndexOf时未设置

C# 组合框SelectedIndex在使用list IndexOf时未设置,c#,.net,winforms,data-binding,combobox,C#,.net,Winforms,Data Binding,Combobox,我以编程方式创建一个组合框,如下所示: var cbo = new ComboBox { DataSource = mylist, SelectedIndex = mylist.IndexOf(myvalue) }; 我没有将ValueMember设置为对象本身的值。当我执行上述操作时,在SelectionIndex行上会出现以下异常: InvalidArgument=值“3”对于“SelectedIndex”无效。参数名称:SelectedIndex 是否因为组合框仍在创建中

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

var cbo = new ComboBox {
    DataSource = mylist,
    SelectedIndex = mylist.IndexOf(myvalue)
};
我没有将
ValueMember
设置为对象本身的值。当我执行上述操作时,在
SelectionIndex
行上会出现以下异常:

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


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

只有在控件变为可见后,数据分页才会工作。因此,您需要将代码更改为:

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
将由数据源项填充,其所选索引将按预期设置。

我更改了使用
HandleCreated
事件的方式。另一种选择是,您也可以使用
VisibleChanged
,而不使用
BeginInvoke