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
。