我正在以编程方式创建一个组合框,如下所示:
var cbo = new ComboBox {
DataSource = mylist,
SelectedIndex = mylist.IndexOf(myvalue)
};
我没有设置ValueMember
,所以该值将是对象本身。当我执行上述操作时,在SelectionIndex
行上收到以下异常:
InvalidArgument =值'3'对于'SelectedIndex'无效。参数名称:SelectedIndex
是因为仍在创建组合框,因此DataSource
仍未填充吗?如果是,设置索引的正确方法是什么?
答案 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
将由数据源项填充,并且其选定的索引将按预期设置。